DXライブラリ 総合スレッド 2008
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/10/25(土) 17:37:53ID:BCFbbKcoGUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
過去スレ:DXライブラリ 総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
0067名前は開発中のものです。
2008/11/09(日) 15:37:16ID:d71QR9Rf公式で紹介されてない所だと夜光蛾4とかDiadraEmptyとか。
同人系は「DXライブラリでここまで作れる」っていう良い例が多いな。
0068名前は開発中のものです。
2008/11/09(日) 16:53:27ID:HksuFgRc個人的にはモノリスフィア。
0069名前は開発中のものです。
2008/11/09(日) 17:01:59ID:p4NI5+2s四聖龍神録は?半オープンソースだし。
0070名前は開発中のものです。
2008/11/09(日) 18:19:57ID:/7amOdfc007154
2008/11/10(月) 00:04:21ID:fweGd5hJ描画先変更できたのかーー!
こいつは便利だ
他にも見落としてる便利な関数あるかもと思って久しぶりに本家リファレンスページ見たら
”ドット単位で画像にアクセスしたい関係”ってのが追加されてて便利すぎフヒヒきゃっほう!!!11
もうひとつ質問です。DrawPolygon3Dかなにかで3D平面を、空気遠近法で表示させたいのですが
似非でもいいのでいい方法ないでしょうか
0072名前は開発中のものです。
2008/11/10(月) 17:51:27ID:22QGh1G7本家のリファレンスみたらわかるはず。
0073名前は開発中のものです。
2008/11/11(火) 01:35:00ID:g6Sl8AVbあとはゲームではないが
ウディタ(WOLFRPGエディタ)もそうだ。
0074名前は開発中のものです。
2008/11/11(火) 16:04:15ID:VHeofJsH参加者は今のとこ私の他は3人です。その後焼き鳥でも食べに行きましょう。
0075名前は開発中のものです。
2008/11/11(火) 19:37:44ID:ktqf9Hz0DXライブラリもその煽りを食らってるって聞いたんだけど、どうなん?
0076名前は開発中のものです。
2008/11/12(水) 06:22:06ID:yL4++M3C9600GT,8800GTS,6600GTの3つ使ってるけどどれも不具合出たこと無いよ。
それよりVistaでたまにおかしなことになる・・。
同じコードで動かしてもXPとVistaじゃ違う挙動することが。
一つ一つのサンプル動かしても全然違わないんだけど、
スゲー大きなプログラムを動かしてみると違いが出てくることがある。
どうしてなんだろ・・。
DX管理人さんはそんなことないって言ってるから
自分のプログラムが悪いだけかもしれんが・・。
みんなそういうこと無い?
0077名前は開発中のものです。
2008/11/12(水) 08:00:35ID:10ZLablIVISTAに最初からはいってるのはDirectX10だからね。それも中途半端な。
MSの中途半端な対応のせいでゲーム開発者はみんな迷惑してる。
DirectX9とか新しいDirectX10とかを入れてみると改善すると思う。
0078名前は開発中のものです。
2008/11/12(水) 08:10:38ID:wRCT4Vg2ビデオドライバ類が関係しているとかないかな
007975
2008/11/12(水) 18:00:22ID:IPCAcIHc自分は持ってないんで確認できないまま適当に書いた、すまん。
008076
2008/11/12(水) 20:17:02ID:yL4++M3C今度出るwindows7だっけ?あれはどうなるんだろう・・。
>>75
VistaとXPデュアルブートするといいよ。
作ったゲーム色んな環境で試してみれる
0081名前は開発中のものです。
2008/11/12(水) 20:59:00ID:IPCAcIHc2000 orz
0082名前は開発中のものです。
2008/11/12(水) 22:09:52ID:10ZLablI0083名前は開発中のものです。
2008/11/13(木) 01:05:13ID:mdnPfmFMなんかうちの周りだと、PCに詳しくない奴が買ってるOSってイメージがある。
そのまま終わっていくのかビスタ。
0084名前は開発中のものです。
2008/11/13(木) 07:38:57ID:lJxFlB+u0085名前は開発中のものです。
2008/11/13(木) 19:45:16ID:EnpEGfrmネットできりゃそれでいいってやつが買ってる印象だな
あとはofficeでも使えりゃ困らないしな
0086名前は開発中のものです。
2008/11/13(木) 23:48:34ID:mdnPfmFM0087名前は開発中のものです。
2008/11/14(金) 00:26:08ID:5PrZBKJs今時デュアルブートって流行らないんじゃない?
VPCとかさ。
0088名前は開発中のものです。
2008/11/14(金) 01:06:10ID:71kfvXp8グラフィックボード使ってなくて、CPU依存
0089名前は開発中のものです。
2008/11/14(金) 01:26:37ID:ZojnRlhq0090名前は開発中のものです。
2008/11/14(金) 01:28:06ID:5PrZBKJs0091名前は開発中のものです。
2008/11/14(金) 01:28:54ID:BF+CzcYiつ*
0092名前は開発中のものです。
2008/11/14(金) 13:57:39ID:foiTr96ESetGraphModeとChangeWindowModeを同時に使うと、
かなりの確率でOSごと落ちるorz
0093名前は開発中のものです。
2008/11/14(金) 14:22:12ID:foiTr96Eサーセンwwwフヒヒwwwww
0094名前は開発中のものです。
2008/11/14(金) 14:48:29ID:ZojnRlhq初期化の前にウィンドウモードにした方が処理が早いよ
0095名前は開発中のものです。
2008/11/14(金) 14:50:12ID:foiTr96Eうちの環境ではなぜかフリーズするんです
0096名前は開発中のものです。
2008/11/15(土) 19:53:04ID:MzdFlqkaゲームの速度をどのPCでも一定になるようにするために、
ScreenFlipを使う前と後の時間差を利用してる方法が本にあったのですが、
そもそもScreenFlip一回の時間はどのように決まっているのでしょうか?
0097名前は開発中のものです。
2008/11/15(土) 20:12:06ID:56rIt8Hu画面のプロパティ→設定→詳細→モニタ で、リフレッシュレートが確認できる。
つってもこれは俺のPC(windows2000)だから他の環境だとちょっと違うかも。
0098名前は開発中のものです。
2008/11/15(土) 20:17:30ID:56rIt8HuScreenFlipがリフレッシュレート通りになるのは
デフォルトで垂直同期信号待ちをしてるからであって、
「SetWaitVSyncFlag ScreenFlip関数実行時にCRTの垂直同期信号待ちをするかのフラグセット 」
で、垂直同期信号待ちを切った場合は関係ない。
また、条件は知らないが特定の環境(うちの場合はサブのノートPC)では
垂直同期信号待ち設定にしていても、ScreenFlipで垂直同期信号待ちしてくれない場合が
ある事を確認済み。
0099名前は開発中のものです。
2008/11/15(土) 20:27:43ID:MzdFlqka返事ありがとう。
リフレッシュレート自体はわかったんですが
後半よくわからなかったのでちょっと調べてみます・・・。
0100名前は開発中のものです。
2008/11/15(土) 20:51:40ID:56rIt8Huってのがどんなのか判らないけど、
ScreenFlipの垂直同期信号待ちを利用した方法だとすると
前述したようにリフレッシュレートに依存するから
「どのPCでも一定の速度」にはならないよ。
リフレッシュレートを60にしてるPCと70にしてるPCではスピードが違う。
まぁそれを踏まえた上でいちばん簡単で代表的な速度を一定にする方法なんだけどね。
(つまり、リフレッシュレートが60の場合を前提としてゲームを作り、
60以外にしてる人は60にしてからプレイしてください、となるw)
0101名前は開発中のものです。
2008/11/15(土) 21:13:47ID:56rIt8Hu俺も聞きかじりの知識だが。
最近はテレビにしろディスプレイにしろ、液晶が主流で「薄型」になってるが
もしブラウン管(分厚い)のテレビなりディスプレイがあるなら、画面の前で手を振ってみるといい。
残像がぶつ切りに、ストップモーションのように見えるはずだ。
これはどういう事かというと、画面が60分の1秒に一回、点滅してるからそう見えるんだ。
(厳密には60分の1秒に画面半分)
つまり、画面が光ってる時に「手の影が見えて」、画面が消えてる時には「見えない」から
手の動きがぶつ切りに見えるわけだ。
そうやって点滅してるのに、ずっと光ってるように見えるのは残像のせい。
もっとも「眼(瞳孔)」の方は反射で動いてるから、画面が光ってる時には瞳孔が小さくなり
画面が消えてる時は瞳孔が大きくなってたりするはず。
だから画面に近づいたり、暗い部屋で画面を見たりすると極端に眼が疲れる。
0102名前は開発中のものです。
2008/11/15(土) 21:24:13ID:56rIt8Huブラウン管ってのは、奥から電子ビームを画面に向けて照射して、その部分のみを光らせてるわけだから
実際に光ってるのは1点のみ。(もっとも一度照射されるとしばらくは持続するらしいが)
その電子ビームの照準が、画面の左上から始まって、右端まで動き、
一段さがってまた左端から始まって右まで動き、を繰り返し、画面の右下まで進む。
つまり
┏━━━┓
┃□ぬ□┃
┃□る□┃ みたいな画面が表示されてると、それは実際は
┃□ぽ□┃
┗━━━┛
┏━━━┓
┃□ぬ□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃
┃□ぽ□┃
┗━━━┛
という感じで高速に書き換えられてるという事。
0103名前は開発中のものです。
2008/11/15(土) 21:30:19ID:56rIt8Huもしこの「動く」のが前述した「画面を書き換えてるタイミング」だったらどうなる?
┏━━━┓
┃ぬ□□┃
┃る□□┃ この状態から
┃ぽ□□┃
┗━━━┛
┏━━━┓
┃□□ぬ┃
┃□□る┃ この状態からにまで移動しようとすると
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃■■■┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃□る□┃
┃■■■┃
┗━━━┛
┏━━━┓
┃■■■┃
┃■■■┃という感じになり、
┃□□ぽ┃
┗━━━┛
┏━━━┓
┃ぬ□□┃
┃□る□┃ 人間の目にはこう映ってしまう。この現象をティアリングと呼ぶ。
┃□□ぽ┃
┗━━━┛
0104名前は開発中のものです。
2008/11/15(土) 21:38:19ID:zVe3F0+t「ScreenFlipを使う前と後の時間差を利用してる方法」ってのを普通に解釈したらリフレッシュレートに依存せずに一定になるよ。
ScreenFlipの待ち時間に関係なく、1フレーム(1ループ)の差時間から移動距離を割り出せばok。
ただし、ゲーム画面がアクティブでなくても実際に時間は経過してるので、ゲームに戻るとその分進む(進んだ)ことになる。
これを回避するなら、ゲーム内で独自にインクリメントカウントを設置し、そこから移動距離を割り出せばok。
ゲームプログラミング独特の考え方だね。
0105名前は開発中のものです。
2008/11/15(土) 21:40:57ID:zVe3F0+tブラウン管テレビは29.97fpsだよ。
0106名前は開発中のものです。
2008/11/15(土) 21:41:23ID:56rIt8Huこれが「垂直同期信号待ち」であって、つまりは
ディスプレイが画面全体の書き換えが終わるまで、
次の描画処理をしないで待ってるってわけだ。
これがScreenFlipではデフォルトで行われてる。
だからScreenFlipを使うと速度が一定に保たれる……のだが、
「画面の点滅は60分の1秒」と言ったが前述したが、これが要するにリフレッシュレートの事。
つまりこの速度をPC側で自由に変更できたりする。
リフレッシュレート60の場合はScreenFlipは60分の1秒経つまで待つわけだが、
リフレッシュレート70の場合は70分の1秒しか待ってくれない。
その分ゲーム速度は速くなってしまうわけだ。
(もしプログラム処理自体が重くて、70分の1秒で終わらなかったら
70分の2秒、つまり35分の1秒かかるわけで、逆に遅くなる)
0107名前は開発中のものです。
2008/11/15(土) 21:47:42ID:56rIt8Hu当たり判定もそれ相応の処理にしなくてはいけないし、
そうなるとリプレイ記録&再生をどうやればいいのかわからなくなる。
そこらへんはどうやってるのかな。
ってこれはDXライブラリと関係ないか。
0108名前は開発中のものです。
2008/11/15(土) 21:57:26ID:zVe3F0+tでもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから
あたかもScreenFlipを使うとスピードがリフレッシュレート依存になるみたいな解説はやめたほうがいいと思うよ。
0109名前は開発中のものです。
2008/11/15(土) 22:29:29ID:PnDW3j7Q1ループが17ミリ秒(60FPS)になるまでウェイトをかけてやればいい
これが一番簡単で確実
0110名前は開発中のものです。
2008/11/15(土) 22:34:05ID:RlpGwAN3それ以外はタイマで
0111名前は開発中のものです。
2008/11/15(土) 23:12:07ID:56rIt8Huいや、俺してたし、してるしw
0112名前は開発中のものです。
2008/11/15(土) 23:32:40ID:zVe3F0+tその話をしてるのは君だけど、実際にそれを採用してる人はいないって事だよ。
もしかして君は採用もしてるの?
だとしたら自分が長々と説明したデメリットが解消できてないよね。
それを解消したくて質問したいならそれなりの場所でそれなりの質問方法を取ればいいと思うよ。
もしそうじゃないなら誰も採用しない方法を解説されてもややこしくなるだけだから…。
0113名前は開発中のものです。
2008/11/15(土) 23:41:52ID:56rIt8Hu最初はゲーム起動時に測って自動切換えにしてたけど
それもやめて結局手動切り替えに……。
0114名前は開発中のものです。
2008/11/15(土) 23:43:35ID:56rIt8Hu移動距離算出方法はやった事ないです。
0115名前は開発中のものです。
2008/11/16(日) 00:40:12ID:H38ODQJJとりあえずDXライブラリを使うならScreenFlip()で垂直同期を待てば良いと思うよ。
スピードの話はまた別の話。
>>113
ゲーム起動時に何を測るの?
それと、切り替える必要性が見えないんだけど・・・?
0116名前は開発中のものです。
2008/11/16(日) 01:43:29ID:Hwka3oLK>ゲーム起動時に何を測るの?
ScreenFlipを一秒間繰り返して、その回数で判断。
>>98で書いたけど、垂直同期信号待ちをしてるはずなのに
ScreenFlipで待ってくれない場合があるから、
FPS値が異常に高かったらそうだと判断して
タイマー値によるウェイトかけるようにしてた。
>それと、切り替える必要性が見えないんだけど・・・?
それはどっちを基準にして?
ScreenFlipを基本として考えるなら、リフレッシュレートが変更された場合や
上で書いた垂直同期信号待ちしてくれない環境の時に異状スピードになってしまう。
タイマ値でウェイトかける場合は、やっぱりティアリングが気になるし、
1フレームごとに点滅するエフェクトとかがきちんと点滅しなくなる。
0117名前は開発中のものです。
2008/11/16(日) 02:40:28ID:H38ODQJJえっと、だからね、ScreenFlipとティアリングは関係あるけど、
それらとウェイトは関係ないって事だよ。
ゲーム起動時にScreenFlipの待ち時間からリフレッシュレートを判断してるようだけど、
それも結局ScreenFlip基準でタイマー取る方式だよね。
てことは例えば60Hzを基準にウェイトをかけるって事だよね。
だとしたらはじめからリフレッシュレートのウェイトなんかに頼らずに、
マルチメディアタイマーででも1/60sを基準にコードを書けばいいでしょ?
だから起動時に測る必要もないし、リフレッシュレートの変更やVsyncを待たない場合は考慮しなくていいの。
繰り返すけど、タイマーでウェイトかけてもScreenFlipを使うならティアリングはないよ。
0118名前は開発中のものです。
2008/11/16(日) 03:40:07ID:Hwka3oLKタイマでウェイトかける場合は、ScreenFlipのVsync待ちはOFFにしてあるんだけど、
それでもティアリングは発生しない?
んじゃ発生してる俺のプログラムは何か間違ってるのか。
理屈上、1/60sを基準にウェイトかけるようにすれば
ゲームスピードは一定になるが、タイミング次第で
ティアリングが発生しない状態か、
あるいはティアリングが発生し続ける状態が
維持されるものだと思っていたのだが。
0119名前は開発中のものです。
2008/11/16(日) 04:22:31ID:H38ODQJJこれを前提に最初から読み返してみて。
0120名前は開発中のものです。
2008/11/16(日) 14:59:43ID:Yf+kFgNP0121名前は開発中のものです。
2008/11/16(日) 17:43:53ID:fHnaEgZYティアリングは発生しないけど動きが凄いガクつくぞ
ADVみたいに動きの少ないゲームならそれでも良いと思うけど、
STGやACTでは見るに耐えない
0122名前は開発中のものです。
2008/11/16(日) 18:33:07ID:H38ODQJJ75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
ティアリングするわfps制限されてるわでひどいもんですわ。
0123名前は開発中のものです。
2008/11/16(日) 21:17:57ID:gVsDrcFZガッ
0124名前は開発中のものです。
2008/11/16(日) 21:57:20ID:fHnaEgZYなんでそんなに相手を見下したような態度なの?
>60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
それはわかってるよ
だから最初にリフレッシュレート測って垂直同期主体にするかタイマー同期にするか判断するんでしょ?
121はあくまでfpsとリフレッシュレートが一致していない場合の話
>75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。
ここで122の言うとおり垂直同期とるかとらないかはプレイヤーの好みの問題
オプションで選択できるようにすべきだと思う
>ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。
そうだね。3Dモノは可変fpsと相性良いよね。
>>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。
垂直同期をとらないことで手軽に入力に対するレイテンシを下げることができるし、
リプレイを取る目的でfpsを固定しなければならない場合もあるんだから、
短絡的に愚の骨頂というのはどうだろう
122的には60fps固定+垂直同期してない東方緋想天は愚の骨頂?
俺はそうは思わないけど・・・
0125名前は開発中のものです。
2008/11/16(日) 22:50:57ID:5RilDqvEリプレイ周りの実装も含めて、やっぱりFPSは60に固定でロジックを組みますよ。
オプションで「Vsync待ちをするかタイマーか」を選択させてます。
124さんもリプレイの話をしているから、そういう前提で言ってるのだと思うのですが。
0126名前は開発中のものです。
2008/11/16(日) 23:07:43ID:xtMr6+ch入力があったキーとその時の経過フレーム数があればいいんだし
0127名前は開発中のものです。
2008/11/16(日) 23:30:59ID:0yDeWpwc0128名前は開発中のものです。
2008/11/17(月) 01:36:47ID:GetktCW+何そのゲーム。>東方なんたら
最悪だね〜。
>>126
だよねぇ。
0129名前は開発中のものです。
2008/11/17(月) 03:32:51ID:qWlXMT4E0130名前は開発中のものです。
2008/11/17(月) 18:51:51ID:TAngTg8T0131名前は開発中のものです。
2008/11/17(月) 21:49:06ID:E1tboJG/0132名前は開発中のものです。
2008/11/17(月) 22:00:58ID:tSUha7RY作者の好意で公開してるソースをそんな言い方するなよ
0133名前は開発中のものです。
2008/11/17(月) 22:04:49ID:Zhr1hzWJ0134125
2008/11/17(月) 22:57:25ID:pxmPH9a8たしかにそうですね。
ただ、自分の場合は、FPSを固定すればあとはキー入力さえきちんと記録できていれば
リフレッシュレートが違えどもリプレイがずれることがないのでそうしていました。
0135名前は開発中のものです。
2008/11/17(月) 23:31:08ID:OriaVhLmやり方も違ってくるんじゃないかな。
0136名前は開発中のものです。
2008/11/18(火) 13:05:35ID:FZcPiuDyしょぼんのアクション だっけ?
やっと1−1クリアだと思ったのに愕然とした記憶がある。
0137名前は開発中のものです。
2008/11/19(水) 13:43:13ID:xnzA6xl60138名前は開発中のものです。
2008/11/19(水) 14:54:42ID:TpPgoKXnあれはやばいです
あれはほんとうに・・やばい・・。
この道10年のベテランですらあれを見ると悶絶して悶え死ぬレベル。
あのソースを読んだあの日、私は自分の人生について考えさせられました。
0139名前は開発中のものです。
2008/11/19(水) 15:08:39ID:lxkh5WN50140名前は開発中のものです。
2008/11/19(水) 15:11:10ID:Lz0a0oQh0141名前は開発中のものです。
2008/11/19(水) 18:41:54ID:TpPgoKXn0142名前は開発中のものです。
2008/11/20(木) 23:58:11ID:UIc9LZep0143名前は開発中のものです。
2008/11/21(金) 00:08:16ID:AZA6fSH/0144名前は開発中のものです。
2008/11/21(金) 00:14:35ID:IPu5qEL0むしろ逆に頭良いと思う
0145名前は開発中のものです。
2008/11/21(金) 00:46:35ID:PFCyKir90146名前は開発中のものです。
2008/11/21(金) 05:06:26ID:0gMw7+uwこれもマジキチ
0147名前は開発中のものです。
2008/11/21(金) 05:58:28ID:VvYw+mZMこれはアイテム4つで実装力尽きるw
配列すら使ってないとかやべぇ
でもスレチ
0148名前は開発中のものです。
2008/11/21(金) 12:55:25ID:3m8CIP+tそれにしてもその作者はDXライブラリ3Dの作者なの?
なんか色々考えさせられるな…。
0149名前は開発中のものです。
2008/11/21(金) 15:36:28ID:ELcxKG7H0150名前は開発中のものです。
2008/11/21(金) 19:40:33ID:yD9XL+v+0151名前は開発中のものです。
2008/11/21(金) 21:42:08ID:FU8hvFU50152名前は開発中のものです。
2008/11/22(土) 22:21:51ID:j0m39ynAゲーム一本完成させるって難しいな。
0153名前は開発中のものです。
2008/11/23(日) 02:26:12ID:YAgqgFQm0154名前は開発中のものです。
2008/11/23(日) 02:27:42ID:Ef5lma7pプログラム練習としても面白いジャンルのような気がします
がんばりましょう
0155名前は開発中のものです。
2008/11/23(日) 14:21:16ID:bJorsnCE俺知ってるよ
そういうのをあじゃいるって言うんだよね
0156名前は開発中のものです。
2008/11/23(日) 17:55:00ID:pnQpCtQfSaveDrawScreen()で画面全体を保存した後に、
その画像を加工して表示するという方法を試しましたが、遅くてとても使えませんでした。
ちなみに手順は
保存→加工→保存→表示です。
加工と二回目の保存の処理の間がとても遅かったです。
直接DXライブラリで描画してる画像をぼかせばもっと早くなると思うのですが、
DXライブラリで直接ぼかす方法がさっぱりわからりません。
どういう方法でぼかせれるのでしょうか?
0157名前は開発中のものです。
2008/11/23(日) 20:09:39ID:YAgqgFQm昔、モーションブラーもどきを自分で作ったが細かいやり方は忘れた。
0158名前は開発中のものです。
2008/11/25(火) 00:31:59ID:xYyBQpV1そのまま画像を描画
↓
αブレンドを適当に128くらいに指定してxy数ドットずらして描画×数回…
こんなのでどう?
0159157
2008/11/25(火) 20:03:29ID:5UMAw8SPああ、そうそう。
そんな感じでできると思う。たぶん。
ずらし量やブレンド率でぼけ足上手いこと調整してどうにかする。
関数化できたら楽そうだ。
0160名前は開発中のものです。
2008/11/25(火) 22:23:11ID:VmASE6nWいろいろとありがとうございます。
アドバイスのおかげで、それらしいのはできました。
縦には動かしていないのですが、とりあえずそれっぽい動作はします。
ソースは以下の通りです。
private void GraphOff(int dot,int graphHandle)
{
for (int i = 0; i < 640 / dot; i++)
{
DrawGraph(i * dot - 640, 0, graphHandle, 0);
DrawGraph(640 - i * dot, 0, graphHandle, 0);
}
}
これでまた問題が出たのですが、この処理非常に重いです。
FPS30固定にしているのですがこれをするとFPS10〜15になります。
軽くする良い方法は何かないでしょうか?
0161名前は開発中のものです。
2008/11/25(火) 22:39:54ID:MBrRa9Zc0162名前は開発中のものです。
2008/11/25(火) 23:02:53ID:EDWbdjkCi < 640/dot
を
i < 160/dot
くらいにまで下げてみる
ぼかすのがゲーム上そんなに大事じゃなかったら
このくらいで妥協するのが一番
0163157
2008/11/26(水) 02:18:18ID:eTjv2Xnvそんなに回数要る?
dotの値がいくら位で何回位描画しているのかとか、コードの意図とかちょっとわからんので
↓とどっちのコードの方が性能良いのかよくわからんけど…
int times = 4;//描画回数:4〜16推奨
int gap = 2;//ギャップ:1〜4推奨。残像拳のような効果を狙うなら大き目に。
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 32 ) ;//描画回数×ブレンド率=128〜256推奨
for (int i = 0; i < times; i++){
DrawGraph( i*gap - times*gap, 0, GHandle, 0);
DrawGraph( times*gap - i*gap, 0, GHandle, 0);
}
0164名前は開発中のものです。
2008/11/26(水) 04:53:23ID:mqCcsZAV本当に速度が必要で、それなりのクオリティーが欲しいなら
LoadSoftImage関数とLoadSoftImageToMem関数を使うといいかもしれない。
自分は近頃、DXライブラリまったく触ってなかったから、どんなもんか
わからんが、説明を読む限りではこっちの関数で処理して
GraphHandleをつけて、表画させる方が高速みたいだし・・・・・
0165名前は開発中のものです。
2008/11/27(木) 05:33:03ID:9lHdy+ssDXライブラリとかの関数を変な使い方すると、めっちゃ重くなったりして(コンパイルエラーが出るわけではない)、
上手く扱わないとたとえ数百行のプログラムでさえ上手く動かないのに
市販されてる3Dゲームとかだとそれこそ想像もつかない量のプログラム書いてると思うんですが
それを全く重くならないように作るというのはまさに神の所業としか思えないんですが・・・
やはり職人的なひとはそれほどすごいってことでしょうか?
それとも単にまだ自分が未熟なだけでしょうか?
なんか抽象的な質問ですみません。
0166名前は開発中のものです。
2008/11/27(木) 07:22:55ID:UFJsiMGy普通に使っている分には問題ないと思うけど…
コード量も関係ないし。
メインのループ(秒間30〜60回くらい回しているとこ)の外で1回やれば済む処理を
ループの中で毎回やってたりしてない?
例えばグラフィックハンドルへの画像の読み込みを毎回やっているとか。
■ このスレッドは過去ログ倉庫に格納されています