DXライブラリ 総合ス ..
2:名前は開発中のものです。
16/01/05 23:46:42.08 fkNSYSkc.net
【前スレ】
DXライブラリ 総合スレッド その18
スレリンク(gamedev板)
【過去スレ】
01 スレリンク(gamedev板)
02 スレリンク(gamedev板)
03 スレリンク(gamedev板)
04 スレリンク(gamedev板)
05 スレリンク(gamedev板)
06 スレリンク(gamedev板)
07 スレリンク(gamedev板)
08 スレリンク(gamedev板)
09 スレリンク(gamedev板)
10 スレリンク(gamedev板)
11 スレリンク(gamedev板)
12 スレリンク(gamedev板)
13 スレリンク(gamedev板)
14 スレリンク(gamedev板)
15 スレリンク(gamedev板)
16 スレリンク(gamedev板)
17 スレリンク(gamedev板)
3:名前は開発中のものです。
16/01/06 02:07:33.23 bl/881x8.net
埋め
4:名前は開発中のものです。
16/01/06 04:35:21.79 vkTt7kSt.net
DirectXを利用したゲーム開発のためのライブラリ「DXライブラリ」に脆弱性 - 窓の杜
URLリンク(www.forest.impress.co.jp)
5:docs/news/20160105_737584.html
6:名前は開発中のものです。
16/01/06 09:50:52.12 uUHWeNkD.net
すれたておつ〜
7:名前は開発中のものです。
16/01/06 13:49:00.22 vToozi2l.net
即死回避
8:名前は開発中のものです。
16/01/06 21:48:53.47 FPsnS4s5.net
リスポーンキル回避
9:名前は開発中のものです。
16/01/06 22:07:03.62 SNpTpPa+.net
char binadata[10000000]ってやったらエラーが出た
char binadata[9000000]だったら大丈夫だった
char binadata[10000000]でもグローバル変数だったら大丈夫だった
なんでグローバル変数だと大丈夫なん?
使うメモリの容量がローカル変数とグローバル変数では違うの?
10:名前は開発中のものです。
16/01/06 22:27:40.57 D/YIuxFU.net
ローカルメモリはスタックメモリに配置されるからって
大学でならわなかったかい?
11:名前は開発中のものです。
16/01/06 23:21:49.75 SNpTpPa+.net
はい、ならいませんでした
12:名前は開発中のものです。
16/01/07 10:01:18.70 Fegao3sZ.net
エラーってstack overflow?
初歩的すぎる
13:名前は開発中のものです。
16/01/12 13:01:35.36 edPYChEu.net
記憶域でのスタックと静的領域とヒープの3つを理解し
適切に使い分けられなければ
蹴り入れられても文句言えない
C言語入門からやり直すべきよ
14:名前は開発中のものです。
16/01/24 15:52:14.74 YuKcV9Os.net
やり直すというより、>>8は現在進行形のC入門者なんだと思う
15:名前は開発中のものです。
16/01/25 17:48:18.36 sajU6FWk.net
ttfファイルを読み込んで使ってるんだけど、あらかじめ同じフォントがインストールされているとサイズがおかしくなる
どうにかならない?
16:名前は開発中のものです。
16/01/25 20:30:11.84 sajU6FWk.net
LoadFontDataToHandle関数で解決しました
17:名前は開発中のものです。
16/02/18 16:31:02.58 hWOqPyim.net
今更だけどこれって
「ディーエックスライブラリ」?
「デラックスライブラリ」?
前者で読んでるけどどっちなんだ
18:名前は開発中のものです。
16/02/18 18:15:07.43 CD7aF1NM.net
もともと DirectX のDXだからディーエックスでいいんじゃない
19:名前は開発中のものです。
16/02/18 19:31:57.04 qySKf0j4.net
ここで聞いていいのか分かりませんが
14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編のP105に
もし複数のキーが同時に押された場合、GetJoypadInputState関数は押されたキーを表す定
数を合計した数値を返します。たとえば←と↑が同時に押された場合、PAD_INPUT_LEFT(実
体は整数の2)とPAD_INPUT_UP(整数の8)の合計(つまり 10 )が返さます。キーを表す定数
には2進数で表すとビットが重ならない数値が割り当てられているので、合計してもキーを表す
ビットの状態は変わりません。
←↑の同時押し ↑→の同時押し
0000 0010(2) 0000 1000(8)
+0000 1000(8) +0000 0100(4)
──── ────
0000 1010(10) 0000 1100(12)
とあるんですが、テンキーって
789
456
123
だから
↑8
←4 →6
↓2
になって、←↑の同時押し:4+8=12、 ↑→の同時押し:8+6=14だと思うんですが、DXライブラリでは
↑8
←2 →4
↓6
になるんでしょうか?
20:名前は開発中のものです。
16/02/18 20:15:38.26 pY1Vnnd1.net
>>18
多分その書籍は「同時押ししても別々に認識できる」
というのを示したかっただけな感じがするので
実際の割当がどうなっているのかはあまり気にしなくていいと思います
あと、テンキーの数字と割当整数がそのまま対応しているわけではないです
21:名前は開発中のものです。
16/02/18 21:30:32.21 w6GurFPy.net
その数字のままだったら、2+4と6単体と区別つかないだろう
2進数慣れといたほうがいいよ
22:名前は開発中のものです。
16/02/18 22:26:00.43 qySKf0j4.net
皆さんありがとう
この部分の前後読んでもさっぱり分からないので
これ以上気にしないで先に進むことにします
この先具体例が出て来るかも知れませんしね
23:名前は開発中のものです。
16/02/19 07:22:42.85 g+RjjMNz.net
ビット演算調べて。
一桁目が1 0001 1x1=1
二桁目が1 0010 1x2+0=2
三桁目が1 0100 1x2x2+0x2+0=4
四桁目が1 1000 1x2x2x2+0x2x2+0x2+0=8
2になると一桁上がるから2進数。
普通の10進数も、例えば、1234は
=1x10x10x10+2x10x10+3x10+4
一つのキーが押されているか押されていないかを表現するのには0と1で充分。
つまりキーが4つなら0000から1111で表現できる。
キーの組み合わせはビットのor演算になる。
2進数だから足し算と結果は同じになるけど。
逆に一つのキーの状態を調べるのはandで。
24:名前は開発中のものです。
16/02/19 17:10:56.60 yVHYDmTr.net
こうして見てると、ビット演算を他人に教えるって結構大変そうだな
25:名前は開発中のものです。
16/02/19 20:45:32.62 9rsuXZwb.net
ビット演算の話なのか?
俺はてっきり
if( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_UP )
みたいに識別子と論理積を使って判定するのではなく
if( GetJoypadInputState( DX_INPUT_PAD1 ) == 8 )
みたいにその数字で直接入力判定してるから、テンキーの割り当て整数を知りたい
っていう話をしているのかと思ったんだけど
26:名前は開発中のものです。
16/02/20 10:04:02.81 EkX5eIPD.net
わざわざそんなことするメリットなくね?
27:名前は開発中のものです。
16/02/21 02:51:09.47 M/Be+VbG.net
とりあえず、入力状態を調べる関数の返り値を2進表記文字列と10進表記文字列で対にして画面左上に表示するだけの簡単なアプリ作っても良いかと思う。
と、ここで気になって調べたら、2進文字列への変換は
Cはitoa←VCでしか使えない? 今回は使えるかな
C++はstd::bitset
簡単なはずなのに、簡単でない気がしてきた。
用途限定なら自作した方が楽な(学べる)気もする。
28:名前は開発中のものです。
16/02/21 04:47:37.86 M/Be+VbG.net
>if( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_UP )
&(and)だから特定の一つのキーが、押されているかのチェック
押されていなければ0、つまり偽 FALSEになりif以降は実行されない。
押されていれば0以外 真となりifは実行される。
if ((GetJoypadInputState(DX_INPUT_PAD1)&PAD_INPUT_UP) !=0)
これが省略されているのが一行目。
0であるならば、0以外であるならば、機械は基本たったこれ2つの判断で分岐する。!=0は0でないなら、の意味。not イコール 0
while(1)とかも同じ
29:lえ方。これは条件が常に真(偽(0)ではない)なので無限ループになる。 for(初期化(が多い);継続の条件;条件が真なら行うこと) いずれ条件が偽になるからこそ使えるということ。 >if( GetJoypadInputState( DX_INPUT_PAD1 ) == 8 ) というかね、それならまだ if(GetJoypadInputState(DX_INPUT_PAD1)==(PAD_INPUT_UP|PAD_INPUT_LEFT)) こういう例をあげてくれたほうが嬉しかったかな。 |を+にかえても思ったとおりに動作はするかも知れないが、それではいけないということ。
30:名前は開発中のものです。
16/02/21 05:53:09.79 M/Be+VbG.net
if(GetJoypadInputState(DX_INPUT_PAD1)&(PAD_INPUT_UP|PAD_INPUT_LEFT))
にしないと使えないね。
寝ます。
31:名前は開発中のものです。
16/02/21 06:01:12.59 M/Be+VbG.net
ごめんこれも使えなかった。
同時に押された判定はすこし長くなるな。
このままではどちらか片方押さた場合でも、、、
眠い。ほんと寝ます。
32:名前は開発中のものです。
16/02/21 08:09:43.06 M/Be+VbG.net
if(GetJoypadInputState(DX_INPUT_PAD1)&(PAD_INPUT_UP|PAD_INPUT_LEFT)==(PAD_INPUT_UP|PAD_INPUT_LEFT))
一つのキーチェックは!=0でいいけど
ボタン1|ボタン2|ボタン3
とか複数キーが押されているかのチェックの場合は駄目ですね。一つのキーが押されただけでも!=0を満たしてしまうから。
連投すいません。そして初級者以外の方、失礼しました。
33:名前は開発中のものです。
16/02/21 08:25:35.10 M/Be+VbG.net
if((GetJoypadInputState(DX_INPUT_PAD1)&(PAD_INPUT_UP|PAD_INPUT_LEFT))==(PAD_INPUT_UP|PAD_INPUT_LEFT))
すいません。もう一度だけ。
c 演算子 優先順位 で検索してください。
確か&(アドレスじゃない方)は==よりあとに評価された気がする。これはCの欠陥ではないのかとか書いてた書籍があった気がする。
不安だし、()はつけといたほうが良いと思う。
34:24
16/02/21 09:00:22.20 Va9zPPiV.net
なぜ俺が適当に上げた例に対して
何レスにも渡って解りづらい解説をしているのだ・・・
というか肝心の>>18はもう居ないっぽいから
質問したかった内容自体がそこで合ってるのかわからんぞ
35:名前は開発中のものです。
16/02/21 09:24:49.20 M/Be+VbG.net
これでも簡単に書こうとしたのですけどね。
どの辺がわかりづらいですか?
簡単なことを簡単に書くのは難しいですね。
36:名前は開発中のものです。
16/02/21 10:04:32.36 Va9zPPiV.net
>>33
説明が長くなるほど要点をつかみづらくなるから
補足は少なく、説明の訂正は出ないようにして、
大事な部分だけ短く簡単に説明した方が初心者には理解しやすい
補足とかは質問者に求められたときだけ説明すればいいかと
37:名前は開発中のものです。
16/02/21 11:11:53.47 M/Be+VbG.net
>>34
了解です。
38:名前は開発中のものです。
16/02/29 21:14:11.05 QBvMTSC4.net
DXLibは初心者向けって聞くけど、シャープDXなどと何が違うの?
2Dゲームの場合。3Dなら素直にUnity使うし
39:名前は開発中のものです。
16/02/29 23:23:38.33 leqKH6jq.net
シャープDXってなんぞ。
初心者にオススメの1つではあるが、これで作られた市販ゲームもあるくらいには幅広いよ
40:名前は開発中のものです。
16/03/01 05:56:45.53 +UwmpDoJ.net
C言語で書きたくてwindowsAPI、グラフィックAPI触りたくない人向け
41:名前は開発中のものです。
16/03/01 15:06:45.22 YBHnpXlS.net
確かにC++ぽく作られてないのは嬉しい。
他の人のソースコードとかが解読しやすい。
42:名前は開発中のものです。
16/03/02 02:56:18.34 ObT9YhJL.net
俺もライブラリ作ってやるぜ!と意気込んで、
グラフィックと入力と音周りが出来たあたりで、DXライブラリで良いんじゃね?と気づいて戻ってくる感じ
43:名前は開発中のものです。
16/03/10 14:06:18.95 hKSGgP4O.net
キャラクターIDをソートする場合なんですけど
こういう場合はやっぱりバケットソート的なアルゴリズムが最速なのでしょうか?
条件
・10000体のキャラクターがいる(ID0〜ID9999)※ID0番は空欄扱いの時に使うので実質9999体
・それぞれのキャラクターはスコアを持ってる(とりうる値はunsigned charの0〜255)
・ソートする時はスコアの低い順に並べる
・スコアが同点ならIDが若い順に並べる
自作した処理の概要
int baketu[10000*256];
int kekka[10000];
まず配列baketu[]を0クリアして
for(int ID=1;ID<10000;ID++){
baketu[(IDのスコア*10000)+ID] = ID;
}
int x=0;int i=0;
while(x<9999){
if(baketu[i]>0){kekka[x]=baketu[i];x++;}
i++;
}
こんな感じです
int baketu[10000*256] ←なんかこれで10メガくらい使うみたいですし
もっとスマートなやり方は無いものでしょうか?
ただ、かなり頻繁に呼ぶ処理なので最優先したいのは速度です
44:名前は開発中のものです。
16/03/10 14:23:40.45 chbXq+m7.net
普通にクイックソートでいいのでは
ソート時間の比較
URLリンク(www.ics.kagoshima-u.ac.jp)
45:名前は開発中のものです。
16/03/10 14:44:23.96 w2U+RHTk.net
そもそも頻繁に呼び出すなら
いちいちソートしないでソート結果をずっと保持する。
オブジェクトの追加削除が頻繁なら、
ソートではなく、正しい位置に差し込むようにする。
46:名前は開発中のものです。
16/03/10 14:44:30.14 HzV85MQu.net
RPGなどのスクロールゲーは、描画可能画像(マップサイズ)を作ってそこに描画した後に、ウィンドウに描画すればいいのですか?
速度やメモリを考えると、やめた方がいいですかね
47:名前は開発中のものです。
16/03/10 15:25:16.50 hKSGgP4O.net
>>43
スコアの変更をするたびに並び替える関数を呼ぶってことでしょうか
その場合は一般的なソートではなくて、条件が限定されてる場合ならではの最適解があると考えて間違いないですよね?
あと今思ったんですけど>>41の処理って下記の処理と速度ほとんど変わらない…?
int kekka[10000];
int x=0;
for(int i=0;i<256;i++){
for(int ID=1;ID<10000;ID++){
if(IDのスコア==i){
kekka[x]=ID;
x++;
}
}
}
48:名前は開発中のものです。
16/03/10 21:20:58.41 w2U+RHTk.net
どっちも2,560,000ループだから変わらないね。
可読性なら、俺は45のほうが解りやすかった。
(というか45を読んでようやく41がなにをしたいのか解った)
スコアの変動幅が少ない(=順位の変動が少ない)なら、
スコアが変わるたびに前後のスコアと比較して入れ換えるやりかたでもいいかな
スコアが頻繁に変わるなら
数秒毎にまとめてquicksort
49:名前は開発中のものです。
16/03/11 00:14:12.32 0nAdN0wU.net
>>44
何が言いたいのか分からんが
ウィンドウより気持ち広めに描画すればいいんじゃないの?
50:名前は開発中のものです。
16/04/22 20:37:11.38 OBq0v7em.net
スマホ版DXライブラリ使ってみた人いる?
51:名前は開発中のものです。
16/04/22 23:20:09.41 SApaeOWl.net
純粋なc#でDXライブラリ作りたいと考えてる
52:名前は開発中のものです。
16/04/23 15:51:01.47 dvo5BuGI.net
フレームレートを上げてゲームの進行の高速化をしたいけどどうすればいいの?
setgraphmodeの第4引数に値をぶっこんでも何も起きん
53:名前は開発中のものです。
16/04/23 21:52:14.10 9QnQQ2rD.net
> 画面モードを設定する
> int SetGraphMode(int ScreenSizeX,int ScreenSizeY,int ColorBitDepth,int RefreshRate=60)
> 戻り値
> DX_CHANGESCREEN_OK 画面変更は成功した
> DX_CHANGESCREEN_RETURN 画面の変更は失敗し、元の画面モードに戻された
> DX_CHANGESCREEN_DEFAULT 画面の変更は失敗しデフォルトの画面モードに変更された
> DX_CHANGESCREEN_REFRESHNORMAL 画面の変更は成功したが、リフレッシュレートの変更は失敗した
とりあえず戻り値の確認しとけ。
あとはフレーム管理をどうやってるかによると思う。
垂直同期に丸投げしないで自前でフレーム管理してるなんてオチは……流石にないか
54:名前は開発中のものです。
16/04/23 22:17:31.43 kA71q19C.net
SetWaitVSyncFlag(FALSE)
55:名前は開発中のものです。
16/04/23 23:16:26.28 O3+kZkoe.net
ゲームループを秒間60回さなくても高速処理できちゃうの?
元より軽く作って、普段はウエイト入れてるだけにしないといけないんじゃないかな。
56:名前は開発中のものです。
16/04/23 23:49:59.85 9QnQQ2rD.net
>>53
何を疑問に思ったが知らんが、最初からそういう話じゃねぇの
57:名前は開発中のものです。
16/04/24 08:09:36.09 5496X3BE.net
>>52
thx。クソ速くなりました
しかしSetWaitVSyncFlagの変更はDxLib_Init前でないと利かないようです
起動中に進行速度を自由に調整したかったのですが難しそうです
58:名前は開発中のものです。
16/04/24 09:15:29.66 nXkxGb8d.net
いやだからフレーム管理方法なんて複数あるんだから
使い分ければいいじゃない
59:名前は開発中のものです。
16/04/24 09:50:30.41 joRVkrHg.net
>>55
頭はゲームの内容を考えることに使った方がいいと思います
60:53
16/04/26 22:34:03.08 x+Gf6b1S.net
>>54
すいません、今自分で作っているモノが何をしても60フレームで安定しているものですから、逆の意味で頭を抱えていたんです。
で、>>52氏の教えに従いVSYNCを外したら2000前後を叩きだしたので、>>51氏の最後の隠しパラメータRefreshRate=60の意味が分かりました。
本当にありがとうございました状態ですm(_ _)m
初挑戦で5年ばかり仕様に気が付かないとか、ちょっと笑えます(^^;
61:名前は開発中のものです。
16/05/04 00:59:12.39 vZnLncWj.net
まあ使う機会があるかどうかは全く別の話だしなー
62:名前は開発中のものです。
16/05/06 14:02:59.70 l2ANUrOw.net
今更だけど、リフレッシュレート変えるのはアカンだろw
垂直同期もオフにすんなw
根元でフレーム間の時間経過を定数倍するとか、
更新処理を複数回呼ぶとかいろいろやり方あるだろが
63:名前は開発中のものです。
16/05/06 14:26:18.62 jbS1d0cx.net
>>60
一般に、60決め打ちとかのほうが
初心者には作りやすいと思うぜ
64:名前は開発中のものです。
16/05/06 15:26:36.70 l2ANUrOw.net
>>61
そういう原始的な作りでも更新処理を複数回呼べばいいだけだし・・・
まあ入門サイトにありがちな経過フレーム数を1とする可変更新方式はゴミなんで
さっさと止めたほうがいいと思うよ
65:名前は開発中のものです。
16/05/06 19:13:13.73 jbS1d0cx.net
固定するならタイマー管理なのかねぇ
最近は120Hzとかのモニタも珍しくないし
>入門サイトにありがちな経過フレーム数を1とする可変更新方式
どんなん?
66:名前は開発中のものです。
16/05/06 21:28:30.41 Grw/W8UC.net
俺も垂直同期切ってタイマー管理だな
75ヘルツのモニターで早送りになった経験があるから
67:名前は開発中のものです。
16/05/06 22:18:18.35 l2ANUrOw.net
固定更新のために垂直同期切ってタイマー管理はありだけど
ティアリングが気になったりしない?
>>62はちょっと分かりにくかったかな
要は垂直同期をとりながら更新をカウントしてるようなタイプね
メジャーなところだと龍神録とか
この方法は環境の違いを直接受けるし、その対処も醜くなるんだよ
68:名前は開発中のものです。
16/05/07 01:18:08.48 oS0WNQLp.net
固定にするなら、リフレッシュレート制御かテアリングか
どっちかを取るしかないんじゃないの?
>カウント
龍神録ちろっと見てみたけど分からんかった
単位時間あたりのループ回数をチェックして、それ超えそうになったらウェイト入れる感じ?
69:50
16/05/08 09:38:16.57 y6rKy2Br.net
2フレームに一度スクリーンフリップをすることでゲームの進行速度が2倍になりました
ゲーム中に速度の変更がきくようになったので目的は達成し解決しました
70:名前は開発中のものです。
16/05/11 22:20:44.58 bMgn9LMw.net
URLリンク(gameprogrammingpatterns.com)
71:名前は開発中のものです。
16/06/07 01:07:55.74 hB66gw1M.net
垂直同期でやってるけど何故かFPSが59.9が多いんだよな
偶に60いくんだけど。龍神録のFPS管理は何故か57FPSになる
72:名前は開発中のものです。
16/06/07 11:13:02.03 AssHyOle.net
もともとNTSCの垂直同期って59.94Hzだけど
今のは完全に60Pなんかね
73:名前は開発中のものです。
16/06/07 20:41:15.55 wUcW1H+O.net
龍神録のところのプログラムって、垂直同期とタイマー待機を同時にやってた気がする
どっちかだけにするといいはず
74:名前は開発中のものです。
16/06/08 16:24:56.19 uqtESUHJ.net
>>70
だからか、東方だと60FPSが多いからなんでだと思ってた
>>71
龍神録のタイマー待機関数をSleepからWaitTimerにしたらいくらかマシになったけど
なぜか垂直同期を切ってFPS制御するより垂直同期とFPS制御を同時にやった方が軽くなった
75:名前は開発中のものです。
16/06/21 16:36:29.41 bN0TQeIa.net
LoadGraph等で同じ画像を複数回読み込んだときは、やはり同じ画像が複数個分メモリに展開されるのだろうか?
76:名前は開発中のものです。
16/06/21 18:42:57.95 YpRlukE1.net
うん
77:名前は開発中のものです。
16/06/21 19:13:04.10 2iYzZ5We.net
画像を改変したりして複数いるなら1回読み込んで、コピーするべき
HDD等からの読み込みは遅いから
78:名前は開発中のものです。
16/07/20 18:57:39.10 /hGHlgJA.net
垂直同期切ってもウィンドウモードだと60fpsになっちゃうんだけどこれどうにかならない?
79:名前は開発中のものです。
16/07/21 02:55:43.25 cqeRkCwh.net
垂直同期切れてないんじゃない?
80:名前は開発中のものです。
16/08/03 16:59:01.47 X+OZY+Fp.net
仮想関数の呼び出しが遅い
最初はDXlibと関係あるのかなーと思ったけどC++の仕様っぽい
みんなも気をつけろ
81:名前は開発中のものです。
16/08/04 02:17:02.01 SwoLOy80.net
自分も聞いたことあるけど、それがクリティカルになるって、
他のところがボトルネックになってたりしない?
あとは最適化オプションとかで何とかなりそうではあるが
82:名前は開発中のものです。
16/08/04 18:34:57.87 BM0zlQCD.net
関数の呼び出し速度が気になるようじゃ元々が問題だと思うんだけど
実際に通常関数を呼ぶのと速度的にはどれくらいの差なんだろう
83:名前は開発中のものです。
16/08/05 17:45:28.67 GXDTbL61.net
3Dモデルのボーンをプログラムで動かすときに、
・ボーンをワールド座標の特定の場所を向
84:くようにしたい(カメラの注視のようにボーンを一点に向けたい) ・ボーンをワールド座標の特定の角度にしたい。例えば、ボーンを水平な角度にしたい を行いたいのですが、 ボーンを動かすのは MV1SetFrameUserLocalMatrix でローカルの変換行列を指定する方法しかないですが どうやればできますか?
85:名前は開発中のものです。
16/08/07 21:54:52.11 0nKMuJM/.net
プログラムをステップ実行したときに
DXライブラリのソースにステップインするにはどうやればできますか?
Visual Studio 2013使ってます
86:名前は開発中のものです。
16/08/07 22:00:00.73 0nKMuJM/.net
ちなみにDXライブラリのソースにステップインしたい理由は
エラーコードが-1しかなくて、何が原因かわからなくて調べるためです
たまに挙動不審になったときの調査もしたいです
87:名前は開発中のものです。
16/08/07 22:44:42.94 0nKMuJM/.net
>>82は解決しました。簡単にできましたww
88:名前は開発中のものです。
16/08/08 00:03:13.72 nCWjYGMh.net
自己解決した時は、どんなに簡単であってもその方法をだな
89:名前は開発中のものです。
16/08/08 09:58:38.04 A5U2Nxs1.net
その方法も何もDXライブラリのソース公開されているからlibファイルの代わりにソースをプロジェクトに追加するだけやん
90:名前は開発中のものです。
16/08/08 10:00:13.35 z9kN9Vnb.net
pdbを置くだけでしょ
ステップインしたらその時にソースの場所聞いてくるわ
91:名前は開発中のものです。
16/08/08 10:03:39.19 YjIAwMDj.net
という風に、人によってやり方違うので
どんなに簡単でも手順は書いておいたほうが
それが質問した人の礼儀かと
レスしようとして自分とこで検証して回答しようとしたら
自己解決しましたの一言でしまってたりすること多いしねえ
92:名前は開発中のものです。
16/08/08 10:12:41.36 A5U2Nxs1.net
pdbって使い道あったのか
いつも使い道分からずに放置してたわ
93:名前は開発中のものです。
16/08/12 09:00:00.33 j8xGV0qx.net
DXライブラリは3Dモデルの大きさをセンチメートルで管理するのがいいのか?
メートルで管理してカメラの Near Clip を小さくするとアウトラインやZTestがおかしくなる
94:名前は開発中のものです。
16/08/13 05:15:02.85 smt/5o17.net
単位は人それぞれだけど、精度を下げりゃ描画が甘くなるのはそりゃ当然よ
95:名前は開発中のものです。
16/08/13 08:56:44.42 kHkMVs63.net
Zバッファのビット深度を変更する関数があったような
デフォは16bitだから32bitとかにしてみては
96:名前は開発中のものです。
16/08/13 09:38:49.80 cO1Dtflu.net
>>90
俺も以前同じようなことで悩んだわ
Near Clipは破綻しない程度に大きな値をとる必要があるとのこと
俺の場合は1メートル〜数万キロのレンジで幅が広すぎて単位をどう弄ろうがZバッファの深度を深くしようがダメだったんで、
ここで教えてもらった「ワールド空間を複数の距離レンジに区切ってそれぞれを描画し最後に合成する」手法で切り抜けた
おかげでカメラが物体から5メートルまで寄ろうが1万キロ離れようがあまり問題はなくなった
ただし代償として描画処理の負荷は上がったけど・・・
>>92
SetZBufferBitDepthでZバッファの深度を変えられる
でも確か24ビットまでじゃなかったかな?
97:90
16/08/13 10:22:48.53 MTyr6UWS.net
>>91-93
レスありがとうございます
SetZBufferBitDepthは簡単なのですぐに試してみます
「ワールド空間を複数の距離レンジに区切ってそれぞれを描画し最後に合成する」手法は
ちょっと簡単にはできなさそうですが、プロのゲームっぽいですね。すごい
98:名前は開発中のものです。
16/08/13 13:32:29.62 cO1Dtflu.net
>>94
方法さえ教えてもらえればそんなややこしい実装じゃなかったよ
1. まずMakeScreen関数で合成用のサブ画面を作る
2. SetDrawScreen関数で作成したサブ画面を描画対象にしてその後カメラのパラメータを設定
3. SetCameraNearFar関数でカメラから一番遠いクリップ領域を指定
4. ワールド空間の物体を描画
5. SetDrawScreen関数で裏画面を描画対象にする
6. DrawGraph関数で合成用サブ画面に描いたグラフィックを裏画面に投下処理つきで描画
7. 2〜6をクリップ領域を1つずつ手前に近づけながらforループで必要回数だけ繰り返す
8. ScreenFlip関数で裏画面と表画面を切り替える
みたいな感じ
継ぎ目がちょっと気になるという欠点があるらしいけど、俺の作ったプログラムでは大して問題にはならなかった
99:名前は開発中のものです。
16/08/13 17:10:08.44 MTyr6UWS.net
>>95
ありがとうございます。実装できる気がしてきました
100:名前は開発中のものです。
16/08/23 06:56:44.62 8oK85pQf.net
すいません。 初歩的なことを教えて下さい。
DXライブラリを3.12aから3.16d(最新版)に昨日上げたのですが、以下の様なエラーが出ます。
エラー 1 error LNK1104: ファイル 'DxDrawFunc_vs2012_x86_d.lib' を開くことができません。
丁度ドライブが一杯になったのでそれでファイル欠損起こしたのかと、整理して落としなおして
再インストールしても変わりません。 消さないでいた3.12aに戻せば正常にコンパイルできます。
どんなポカミスが考えられるでしょうか。
101:名前は開発中のものです。
16/08/23 08:00:58.44 ZkV35hFb.net
DXライブラリのフォルダの下を 'DxDrawFunc_vs2012_x86_d.lib' で検索して、
そのフォルダがプロジェクトのプロパティの「リンカー」の中の
「追加のライブラリディレクトリ」に設定されているか確認してみたか?
設定してなかったら設定する
102:97
16/08/23 10:52:44.72 8oK85pQf.net
ありがとうございます。
おっしゃるとおりでした。
C/C++全般のインクルードディレクトリだけ変更してリンカ全般の追加を変更していなかったのが原因でした。
これで総て正常終了できました。
ありがとうございました。
103:97
16/09/16 19:48:32.55 /GVguODS.net
DrawBox()って思った以上にコスト高なのね。
エディタ作っているのですが、マウスで指定範囲を決定するのに半透明のFilling=TRUEで
サイズが{400,200}程度になると追いついて来ないし。うちの環境だと。
まあ範囲が分かれば良いだけなので、非透明のFilling=FALSEにしましたが。
機能の根幹に必要な命令じゃなくて良かった・・・。
104:名前は開発中のものです。
16/09/16 20:42:39.00 arX7j3iZ.net
ハードウェアで描画してないだけちゃうの?
105:100
16/09/17 02:14:24.29 bU3etqlH.net
>>101
SetUse3DFlag()指定しなければデフォで使ってくれないの?
TRUEで明示してみたけどやっぱ重かった。
106:名前は開発中のものです。
16/09/18 05:02:11.08 /gg7FKD1.net
画面全体塗りつぶすのに毎フレーム使ったりするし重いわけないと思うがなぁ
最新版では試してないけど
107:100
16/09/22 22:23:47.41 j/yM3Z13.net
>>103
すいません、DXライブラリは無罪でした。
コード読み直していたら、離れた所から12回ループでDrawBox()してからScreenFlip()しておりました。
そりゃ感覚とは結果が違うのも当たり前で。
大変失礼しました・・・。
108:名前は開発中のものです。
16/09/23 11:02:39.00 grmg4z9F.net
∧∧
ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
まぁ原因判明してよかったね
109:名前は開発中のものです。
16/09/26 22:11:34.39 gS8npJwc.net
スーファミっぽくラスタースクロールの波うつようなあのぐにゃぐにゃした表現をしたいんだけれども
DrawRectGraphで一列ずつ描画するのと
SetDrawAreaで描画できる範囲を一列ずつ変更しながら描画するのと
どっちが早いんだろう
110:名前は開発中のものです。
16/09/27 07:34:39.52 6RU/4Se1.net
どっちもクソ遅そうな気が……
ラスタースクロールのシェーダー書くのがいいが、
シェーダーはDXライブラリではちょっと敷居が高くてプログラム難しそうなのな
ボーンを仕込んだポリゴンの板に画面の画像を貼り付けて、
ボーンでラスタースクロールふうにアニメーションさせるのが楽な気がする
111:名前は開発中のものです。
16/09/27 12:29:31.97 kk2kAC73.net
10年前のPCで動くSTG(弾は500発程度)で、640*480程度なら上から一行ずつ描画でも特に処理落ちしなかった
DrawRectGraph使った
今のハードなら余裕だと思う
112:名前は開発中のものです。
16/10/04 20:15:50.94 rnDdxDqG.net
SetLoopAreaTimePosSoundMem()
この関数めっちゃ便利なんだけどググっても全くヒットしなかったんだが、いつ頃からあるんだろ?
ループ開始位置と終了位置をms単位で指定できるから音声ファイルを編集する必要がなくなった
無加工のファイルでもこっちの好みでループ範囲を指定できるから
音楽ファイルはこの素材屋からDLしてねってreadmeに書いておけば配布するファイルサイズも小さく出来る
あと軽く検証しただけだけど再生中に指定しなおしても有効だったから
FF6のラスボス戦みたいに
イントロ‐Aメロ‐繋ぎ‐Bメロ‐繋ぎ‐Cメロ〜 みたいになってるファイルで
最初はAメロをループ、条件を満たしたら繋ぎを経由してBメロループに移行〜みたいな演出も簡単に出来る
113:名前は開発中のものです。
16/10/04 21:56:37.68 HgclvPkb.net
そんなのあったのか
最後まで行ったら途中から再生、ってのは
結構前からあったの覚えてるんだが
114:名前は開発中のものです。
16/10/15 11:32:13.14 NMxKtSgQ.net
試してないけど
アンドロイドでも
動くように
なってたのね知らなかった
何処まで、動くのかな?
115:名前は開発中のものです。
16/10/16 19:58:12.00 ZsomXKa1.net
あらかじめ大きめのサイズの空っぽの画像をMakeScreenで用意しておくことの有用性に今頃気付いたぜ
これとDerivationGraphのコンビで作り直したらぐっと軽くなった
116:名前は開発中のものです。
16/10/16 21:02:14.27 ldA8bGPF.net
テクスチャ切り替えはコスト大きいからね
117:名前は開発中のものです。
16/10/23 23:02:40.45 t2BOiWAY.net
>>109
使ってみたら、ほんとにスゴイですね。
時代がCDDAやストリーミング再生になってもう無限ループは無理なのかなーとか思っていたのだけど。
ただWAVEで成功したのでそのデータをMP3にしたら、上手く繋がらなくなっちゃった。
もう少しデータの作り方工夫すれば上手く行くのだろうけど。
118:名前は開発中のものです。
16/10/24 06:53:24.03 YwSDnTaO.net
>>114
MP3はこの関数に限らずループの時に違和感が出ると言われてるから
たぶんMP3の仕様の問題もあると思う
ogg形式では上手くいったよ
ただ変換の時にビットレートを固定したファイルでしか検証してないから
可変ビットレートの方法で圧縮されたoggファイルで上手くいくかは未検証
119:名前は開発中のものです。
16/10/24 12:40:43.17 GmlKA2wN.net
MP3は権利の問題があるから他の使えって言われてた時期があったね
120:名前は開発中のものです。
16/10/24 13:10:36.88 Y2gOrRK8.net
権利よりも仕様が問題だな
MP3は無音が挿入されたり余計なことされる場合が多いからゲームに使うようなもんじゃない
他の環境では手抜き実装でWindowsの再生機能に丸投げできるメリットがあるが、DXライブラリなら関係ないし
121:名前は開発中のものです。
16/10/24 23:43:54.13 UrCtC7CV.net
ループできないからだったか、昔は
DXライブラリではogg使うなとかもあったね
122:名前は開発中のものです。
16/10/27 13:49:28.51 1Lorx2LL.net
昔は BGMにはmp3, 効果音にはwav だったでしょ
123:名前は開発中のものです。
16/10/27 15:57:58.01 HwaxCMEV.net
116の言う通りmp3はライセンス関係が危ないということで避けられoggが推奨されていた
仕様よりもこっちのほうが重大問題
ゲーム制作関係でmp3推奨というのは聞いたことがない
124:名前は開発中のものです。
16/10/27 17:43:02.40 rFz+rXeH.net
MP3登場時にはoggなんてなかったから
Wavよりファイルサイズの小さいMP3を推奨する風潮はあったと思うけど
125:名前は開発中のものです。
16/10/27 18:10:43.67 HwaxCMEV.net
ogg普及前はソフトウェアMIDIが多かった
もしmp3が主流だったと思う人がいたら、その人のいた界隈はライセンス関係の意識が薄かったんだよ
まぁ00年代前半まではそういう時期でもあったけど
126:名前は開発中のものです。
16/10/27 20:01:09.28 lueiMAyc.net
市販のゲームで5000本以上販売が課金の条件だったから、フリーゲームや小規模同人では普通に使われてたよ
127:名前は開発中のものです。
16/10/27 20:28:51.91 BuMiN4CL.net
制作中のゲームにはキャラの髪型や服や装備や小物を変えるキャラメイキング(着替え)の機能があって、
今はひとつのMV1ファイルにまとめておき、フレーム表示/非表示で切り替えてるのですが、
だんだんアイテムが増えてきてファイルが大きくなってしまったので
別の方法をとりたいのですが、
キャラメイキングや着替えを実装するのに何かいい方法ありませんか?
髪型や服や装備や小物ごとにXファイルでバラバラにしておいて、Xファイルをテキスト結合するのが
楽なのではないかと思っていますが、もっと良い方法ありませんか?
128:名前は開発中のものです。
16/10/31 19:03:23.01 X+KVjoNa.net
DXライブラリのユーザーが作ってるのって
2Dゲーと3Dゲーのどっちが多いんだろ?
俺は3Dには手が出せてないんだけど
129:名前は開発中のものです。
16/10/31 19:10:44.78 8dsRDt6U.net
2D
130:名前は開発中のものです。
16/11/01 22:09:07.08 kJ7Uoghc.net
3Dは海外のゲームエンジンが無料化されてしまったので、
3Dゲーム制作者はそっちへ行ってしまった気がする
2Dだとどれもあんまり変わらない気がするが
131:名前は開発中のものです。
16/11/01 22:26:25.51 +8ot24fl.net
2Dも描画しかないDXライブラリよりもオブジェクト管理出来たりするエンジンに流れている気がする
132:名前は開発中のものです。
16/11/02 07:20:39.55 /aW+4m+D.net
全部コードに直書きする形でならなんとか自分の思う通りに作れるようになったとは思うんだけど
さすがに会話イベント一個追加したり、マップに壺一個追加しただけで再コンパイルする必要がある状況って
なんというか我ながらアホだよね
この状況を卒業するには何を勉強したらいいのかアドバイスください
作ってるのは2DRPGで、主にNPCのイベント内容をコードの外に出すにはどうやればいいかで躓いてます
とりあえず思いついてるやり方は
セリフ表示とか効果音を鳴らすとかのイベント処理を担っている関数に番号振って引数の数を紐付けしておいて
イベントの内容を全部、関数の番号、引数の数、引数の数値…って数字だけのデータにして
そのデータを読み込んで、どの関数を呼び出し引数にはどんな数値を入れるかを判断して実行する関数を作り
イベントの内容を全部数値に置き換える方法なんですけど
133:名前は開発中のものです。
16/11/02 08:13:58.60 8LrVjVrS.net
>>129
自分でも気付いてる通り、基本原則はコードとリソースを分離すること。
テキストファイルの読み込み
134:ニ解析が出来るなら 単純なシナリオファイル(会話+αくらい)のローダくらいなら比較的簡単。 まあそれ以上に複雑なことをやるなら、素直に 既存のスクリプト言語の組み込み用ライブラリを頼ったほうが良いと思うけどね。 次点としては、ソースファイルの構成を見直して、最低限のビルドでも済むようにすること。 各クラスの書き方、各ファイルの依存関係なんかを整頓することで、 ちょっと修正したくらいなら、長時間のビルドを要さなくなる。
135:名前は開発中のものです。
16/11/02 13:45:37.24 /aW+4m+D.net
大体の方向性はこんな感じでいいんだということであれば進めていきたいんですが
躊躇している理由が2つあります
基本的に作り始める時に
クラスとかポインタとかよくわかんないけどとりあえずやってみるべ!と始めたので
配列と構造体だけで設計されてて、実は今でもクラスのことはよくわかっていません
だけどキー入力を把握すことと、変数の操作と、画像と音を自分の望む形で望むタイミングに表示再生出来るなら
自分の作りたいゲームは作ることが出来るはずだ!という考えの下で強引に作り続け
変数の値に合わせて画像や音の状態を制御する関数を作って、それを毎フレームScreenFlipの前に呼び出している
なんていう作りになってしまってます
キャラクターに歩行アニメーションや特殊なポーズをとらせたりするのも
BGMを変更するのも効果音を鳴らすのも、HPMPの増減やアイテムの入手なども
picture[ kyaraDATA[kyaraid].pictureID ].pattern=8;
SEplayflag[seID]=1; BGMID=BattleBGMID; とか
kyaraHP[kyaraid]+=1000;
itemstorage[itemid]++; とか
ほとんどこういう形でイベントを組み立ててるんですよね……
ちなみにこの変数全部グローバル変数です
この単純な変数操作を外に出のに、変数全部に番号振ってやる以外に方法が思いつかず
その数が数だけにちょっと躊躇っているのです
それに
if(itemstorage[itemid]<99){
itemstorage[itemid]++;
takarabakoOpenFlag[takaraID]=1;
}else{
JISAKU_serihu(1,"これ以上持てない",0);//最初の引数がしゃべるキャラ、最後のは吹き出しの形のタイプ指定
}
みたいに作ってるイベントの条件分岐の部分の外部への出力方法が思いつかないっていう問題点もあります
なんかこう、こんな低レベルな人間にもできる上手いやり方ありませんかね?
136:名前は開発中のものです。
16/11/02 15:10:54.49 C/+BZRXz.net
2chは行頭の半角スペースやタブは無視する
137:名前は開発中のものです。
16/11/02 15:11:48.53 C/+BZRXz.net
途中で書き込んでしまったけど、そういうわけでコード書くときは全角スペース使って見やすく書いて
138:名前は開発中のものです。
16/11/02 15:50:25.87 /aW+4m+D.net
if(itemstorage[itemid]<99){
itemstorage[itemid]++;
takarabakoOpenFlag[takaraID]=1;
}else{
JISAKU_serihu(1,"これ以上持てない",0);//最初の引数がしゃべるキャラ、最後のは吹き出しの形のタイプ指定
}
複数行にまたがってる部分はここだけです
後は本当に変数に代入してるだけというか…
139:名前は開発中のものです。
16/11/02 15:53:23.25 22j5AZ4g.net
>>131
データにしやすいパターンやお約束のイベントだけをデータベース化して
特殊処理はそのままハードコートでいいんじゃねぇの
「これをデータ化したら本当に効率化されるのだろうか」と考えて
非効率になりそうだったらハードコートのまま
そんなことよりもっとプレイヤーから見て喜んでもらえることに意識を集中したほうがいい
140:名前は開発中のものです。
16/11/02 17:31:46.86 mreiywNQ.net
 あ
この板Unicode参照出来なかった?
141:名前は開発中のものです。
16/11/02 17:32:02.03 mreiywNQ.net
無理か
VIPなら出来るのに
142:名前は開発中のものです。
16/11/09 13:59:08.62 DtsDG8yY.net
3Dゲームでマウスをクリックした位置にある3Dモデルをできるだけ高速に取得したいのですが、
何かいい方法はありますか?
コリジョン(衝突判定)関数がありますが、当たり判定用のメッシュを用意しないといけないようなので
ちょっと手間がかかりすぎるのでできればもっと手軽な別の方法がいいですが
143:名前は開発中のものです。
16/11/10 02:38:50.44 woNsYOXh.net
他に方法無いやろ
144:名前は開発中のものです。
16/11/22 19:00:44.40 4Lu6ZO/B.net
ちょっとウンコしてくる
145:名前は開発中のものです。
16/11/22 19:35:51.98 amdDwmR+.net
Convert Mouse Location To World Spaceでライントレースしか分からない
146:名前は開発中のものです。
16/11/22 19:38:26.07 amdDwmR+.net
>>141
ue4スレと間違った
147:名前は開発中のものです。
16/12/10 02:51:28.41 H338C5QI.net
しまった!お尻ふいてなかった
148:名前は開発中のものです。
16/12/10 21:12:58.27 ijDtE922.net
>>138
画面描画には直接利用しないテクスチャに取得対象モデルをレンダリングしておいて判定するとか
149:名前は開発中のものです。
16/12/10 21:14:24.90 ijDtE922.net
とおもったら1月前かよ
150:名前は開発中のものです。
16/12/18 01:11:06.45 w4mjhhpa.net
初歩的なことですが、
画像を描画する際の関数の仕様について迷っています
例えば、描画系の関数をできるだけ少なくして、内部変数によってDXライブラリの描画関数を呼び分けるのがいいのか、
あるいは、描画系の関数を目的別に用意して、画面側で使い分けるのがいいか
フェードインの機能の場合、
前者なら「setModeFadeInの後、drawする」
後者なら、「drawとfadeInをそもそも別関数にする」
個人的には前者が正解のような気がしているのですが、
そもそも発想自体が間違っているのでしょうか?
御存知の方いれば、ご教授頂けると嬉しいです
151:名前は開発中のものです。
16/12/18 17:01:06.63 g4K5bJ5s.net
関数の仕様と言うよりは、抽象度とか設計とかの話なのかな?
なんとなくは分かるけど誤解してるかもしれないんで
数行程度のサンプルソースを書いてくれると嬉しい
152:名前は開発中のものです。
16/12/18 17:12:32.47 GrYJvN1j.net
個人的には後者の方が好き
状態が多いとバグの原因になる
153:名前は開発中のものです。
16/12/18 18:47:26.76 w4mjhhpa.net
>> 147
たしかに、「抽象度とか設計」の質問と言った方が適切かもしれません。失礼しました
具体的にいえば、以下のイメージです
■パターン1
if (ボタンが押されたら) {
画像A.setFadeIn(引数に透過速度などの更新情報);
}
画像A.draw();(透明度の加減処理。 また透過度が100以外なら、DXライブラリのSetDrawBlendModeを使うかを判定。フェードインが終わったら、内部変数のフラグを立てる)
if (画像A.IsFadeInComplete()) {
// フェードイン終わった!
}
154:名前は開発中のものです。
16/12/18 18:48:30.96 w4mjhhpa.net
■パターン2
if (ボタンが押されたら) {
グローバル変数B = true;
}
if (グローバル変数B) {
画像A.drawFadeIn(引数に透過速度などの更新情報。毎フレーム同じ情報を渡すのが違和感);
if (画像A.IsFadeInComplete()) {
// フェードイン終わった!
}
} else {
画像A.draw();
}
最初はパターン2でやっていたのですが、これだと例えば「回転とフェードインとかが同時にできない?」と思って、パターン1に変えました
すると、今後はフェードインの更新情報を画像Aに持たせたためか、あるいは、draw関数内の条件分岐が増えたせいか、処理が重くなってしまいました
この程度で重くなるのかも疑問ですが、そもそも両パターンともNGなのではと思い始めた次第です
ゲーム系プログラミングのお約束が分かってないのが、一番の原因ですが……
>>148
ご教授ありがとうございます。
何がバグの原因になるとか全然分からないので、大変参考になりました
155:名前は開発中のものです。
16/12/18 18:53:42.88 w4mjhhpa.net
132 133 の書き込みを読むべきでした すみません……
■パターン2
if (ボタンが押されたら) {
グローバル変数B = true;
}
if (グローバル変数B) {
画像A.drawFadeIn(引数に透過速度などの更新情報。毎フレーム同じ情報を渡すのが違和感);
if (画像A.IsFadeInComplete()) {
// フェードイン終わった!
}
} else {
画像A.draw();
}
156:名前は開発中のものです。
16/12/18 19:39:00.88 g4K5bJ5s.net
グローバル変数を使うかどうかとか
複数の状態を同時に実行できない問題をどうするかとかは別として
自分なら2の方向かなあ
157:名前は開発中のものです。
16/12/18 20:00:49.02 oO1EoBtD.net
>>146,>>149-151
細かい点ですが、「フェードイン」とは、画像Aが透明な状態から徐々に濃く(明るく)なっていく処理をさしているのですか?
ボタンを押さないとフェードイン処理が始まらないみたいなんですが、
そもそもボタンを押してないと、画像A.draw()で何を描画してるんですか?
また画像A.IsFadeInComplete()が真になると、何が起こるんですか?
この部分は問題を説明する上で、さんぷるにふくめるひつようがあるのですか?
またなぜ151のパターン2で、わざわざグローバル変数Bをサンプルに含めているのがよくわかりません
サンプルとしては、
if (ボタンが押されたら) {
画像A.drawFadeIn(引数に透過速度などの更新情報。毎フレーム同じ情報を渡すのが違和感);
:
でいいんじゃないですか
仕様がいまいちイメージできません
158:名前は開発中のものです。
16/12/18 20:04:49.88 GrYJvN1j.net
あーでもグローバルじゃなくてブラシクラス作ればいいかも
159:名前は開発中のものです。
16/12/18 20:08:44.65 oO1EoBtD.net
質問の意図は
■パターン1
画像A.draw(ボタンが押されたか、引数に透過速度などの更新情報);//毎フレーム同じ情報を渡すのが違和感
■パターン2
f (ボタンが押されたら) {
画像A.drawFadeIn(引数に透過速度などの更新情報);
} else {
画像A.draw();
}
でどっち?
みたいな話かと思ったけど、ちがうのか・・・
160:名前は開発中のものです。
16/12/18 20:41:41.19 w4mjhhpa.net
>>153
ごめんなさい たしかにサンプルが不適切です
この場合だとフェードインではなく、フェードアウトになります
ボタン押したら、画像が消えていくみたいな
質問の意図に関しては 155で指摘されている通りです
>>155
ありがとうございます
グローバルではなく、staticなローカル変数、あるいはブラシクラスを検討してみます
ブラシクラスとなると、画像インスタンスを受け取って、内部情報を更新するという意味かな
161:名前は開発中のものです。
16/12/18 21:01:52.62 w4mjhhpa.net
思った以上に反応があって、ちょっと焦ってました
156の「>>155」は、「>>152」が正しい
154の「グローバル」の意味が把握できていないけど、たぶんグローバル変数Bのことじゃないよね
156の自分の書き込みは無茶苦茶。グローバル変数Bとブラシクラスは関係ない
とりあえず方向性は見えてきたので、ありがとうございます
162:名前は開発中のものです。
16/12/18 21:08:52.00 oO1EoBtD.net
流れがつかめませんが、解決したんですか
ちなみに>>155でいうと、自分はパターン2派。可読性が良くなると思うから。
画像A.のdrawFadeIn()とdraw()で重複するブロックが肥大化してきたら、その重複部分をinline関数に切り出してる
しかし・・・
確かに可読性が悪いとストレスの原因になるが、
可読性を確保する労力が新たなストレスと生むというジレンマ・・・
163:名前は開発中のものです。
16/12/18 22:50:19.71 w4mjhhpa.net
>>158
混乱させてしまったようで、申し訳ないです
155の意図をやっと把握しました(訂正に訂正を重ねてホンマ……)
パターン1は、どこかでフェードインの命令要求を登録した後、draw関数を呼び出します
draw関数内では、透過度の変更要求の確認、透過度の更新、および、DXライブラリ「SetDrawBlendMode」の呼び出しを行います
透過度の変更要求がない場合は、SetDrawBlendModeを使いません
なので、通常描画もフェードイン描画も一律draw関数を呼びだすことになります
パターン2は drawFadeIn とdraw を別関数にします
フェードインするときは、drawFadeInを呼び出して、引数として透過度の更新情報を渡します
結論としては、皆さん「パターン2がマシ」と仰っているので、その路線で進めようと思います
描画処理専門のブラシクラスも含めて、検討してみます
可読性に関しては、最近、可読性を確保するためのストレスに負け始めてます
重要なのは重々承知ですが、やはり面倒……
趣味なはずなのに、仕事と同様のストレスを感じる
164:名前は開発中のものです。
16/12/18 23:01:1
165:7.32 ID:oO1EoBtD.net
166:名前は開発中のものです。
16/12/19 00:31:54.60 HwJJ4Rji.net
例えば「マリオが死ぬと画面がフェードアウトして画面が切り替わる」
…という処理があるとして
■パターン1
マリオの死亡処理のところに
具体的な切替演出の設定(この場合はフェードアウト)を書くことになる。
■パターン2
マリオ死亡時にやることは
画面切替フラグを立てるだけで、死亡処理に集中することが出来る。
画面切替の演出には、画面がどんどん暗くなる「フェードアウト」だけでなく、
真っ白になったり(ホワイトアウト)、ワイプしたり色んな演出パターンが考えられる。
実際にやるかどうかは別としてね。
そうなると、画面切替処理は独立させておいたほうが取り回しが良くなるのではないか?
というのがオイラの考える2のメリットかな。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
281日前に更新/285 KB
担当:undef