- 1 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 17:37:53 ID:BCFbbKco]
- Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、 「DXライブラリ」に関するスレッドです。 DXライブラリの詳細ついては homepage2.nifty.com/natupaji/DxLib/ を参照して頂きたい。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 過去スレ:DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/
- 44 名前:名前は開発中のものです。 mailto:sage [2008/11/02(日) 11:25:09 ID:N/BXqZR7]
- で、DXライブラリに当たり判定してくれる関数はないの?
- 45 名前:名前は開発中のものです。 mailto:sage [2008/11/02(日) 12:31:49 ID:5aCVFStd]
- 3D版にはあるね。
本家の隠し関数の中にあるかどうかまでは知らない。
- 46 名前:名前は開発中のものです。 mailto:sage [2008/11/02(日) 15:48:59 ID:HThmNcwB]
- >44
DXライブラリって、そういう系統の関数は用意しないという設計思想のよーな。
- 47 名前:名前は開発中のものです。 mailto:sage [2008/11/02(日) 19:05:58 ID:tamTTJ4k]
- DXライブラリの2Dの方は2Dだし別に衝突判定とか用意しなくていいと思う。
初心者なら四角か球同士の判定を自分で実装することの勉強にもなるし2Dは 高校の数学程度で十分自力で実装可能。 3Dならそれだけで分厚い本があったり研究者がいたりするくらいだから面倒だけど。
- 48 名前:名前は開発中のものです。 mailto:sage [2008/11/02(日) 19:10:46 ID:R+WQmTm1]
- 3DでもAABBや球の辺り判定なら2Dと変わらないよ
2Dでも面倒なことするなら面倒
- 49 名前:名前は開発中のものです。 mailto:sage [2008/11/07(金) 09:51:29 ID:D/J6e6ls]
- 3DのAABBは、スキンメッシュだと非常に面倒
- 50 名前:名前は開発中のものです。 [2008/11/07(金) 17:21:25 ID:F7VY1GkH]
- あー、ブロッコリー食いたくなってきた。スレチガイかもしれませんがあれってどうやって食べるの?
- 51 名前:名前は開発中のものです。 mailto:sage [2008/11/07(金) 17:24:04 ID:F7VY1GkH]
- すみません。板間違えてました。野菜板で聞いてみますノシ
- 52 名前:名前は開発中のものです。 mailto:sage [2008/11/07(金) 17:32:26 ID:AIGNp4++]
- ちょwww
- 53 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 04:58:31 ID:AWLKZdyA]
- DXライブラリのスレは勘違いでいいから賑わって欲しい・・w
- 54 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 14:28:00 ID:zrv99/58]
- WMPの視覚エフェクトをまねたいんだけど
リアルタイムの画像処理はDXライブラリじゃ難しい?
- 55 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 14:45:42 ID:cVyljR6E]
- >>54
DXライブラリを詳しくわからないのだけど、 DXライブラリってテクスチャつかえますよね? レンダリングターゲットをテクスチャに設定して そこに視覚エフェクトを描画。 それを、通常レンダリングターゲットにもどして そのテクスチャを描画してみては? 視覚エフェクトのアルゴリズムがわかれば可能だと思います。
- 56 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 15:49:01 ID:eTLcPw0w]
- 特定のキー以外を取得したいのですが、
例えばエンターキー以外が押されている場合を取得するのはどうやればいいのでしょうか? if (CheckHitKey(KEY_INPUT_0) == 1) { flgOn = true; } if (CheckHitKey(KEY_INPUT_1) == 1) { flgOn = true; } if (CheckHitKey(KEY_INPUT_2) == 1) { flgOn = true; } .... if (CheckHitKey(KEY_INPUT_RETURN ) == 1) { flgOn = false; } のようにして、一つずつどのキーが押されているかを判定して、 その押されたくないキーの時だけフラグをONにしないと言う方法を考えたのですが、 大量に判定(255個?)しないといけません。 それに書く量も多いです。 何か良い方法はないでしょうか?
- 57 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 16:18:22 ID:QvZXcY8M]
- >56
普通に考えればそうなるんじゃないかなあ。 タイピングを必要とするソフトなんだろうか。
- 58 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 16:22:15 ID:mEomuEol]
- >>56
KEY_INPUT_○○を全部一つの配列に入れとけばループで処理できる KEY_INPUT_RETURNが来たときだけ別にすればいい
- 59 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 16:30:21 ID:L3IthcNy]
- flgOn = false;
if (CheckHitKey(KEY_INPUT_RETURN) == 0) { flgOn = true; } じゃだめなの?
- 60 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 16:31:40 ID:L3IthcNy]
- あーごめん、だめだ。 エンター押されてない かつ ほかのキーが押されてる だったね
- 61 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 16:31:51 ID:jD220VQN]
- >>56
CheckHitKeyAll( void )を使って、キーボードの状態を監視しておいて、 何か押されたとき、CheckHitKey(KEY_INPUT_RETURN)で、 エンターが押されているかどうか判別する。 エンターが押されていなければ、エンター以外の何かが押されたことになる。
- 62 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 17:05:01 ID:cnhuR5Wy]
- CheckHitKeyAll(void) だとマウスボタンとゲームパッドも反応するので
CheckHitKeyAll(DX_CHECKINPUT_KEY) で。 ……これでもパッドが反応するんでコードチェックしたらバグだった。 DxInput.cpp: >// ジョイパッドのチェック >if( CheckType & DX_CHECKINPUT_KEY ) // DX_CHECKINPUT_PAD のはず 気になるならバグ報告して修正を依頼してください。
- 63 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 17:08:47 ID:eTLcPw0w]
- みなさんありがとうございます。
一応タイピングのゲームです。 ループ処理をヒントに、 bool flgOn = false; for (int i = 0; i < 256; i++ ) { if (i != KEY_INPUT_RETURN) { if (CheckHitKey(i) == 1) { flgOn = true; } } } という風な処理にしたら、一応望み通りの動きができました。 でもバグ有りそうな予感がします。 CheckHitKeyAllを使えばもう少しスマートに書ける……のかな?
- 64 名前:名前は開発中のものです。 mailto:sage [2008/11/08(土) 17:24:48 ID:QvZXcY8M]
- タイピングゲームって言っても、使わないキーはあるだろうから
そのあたりを省いた方がいいかも
- 65 名前:名前は開発中のものです。 mailto:sage [2008/11/09(日) 13:19:18 ID:YyCrr7f5]
- KEYリテラルはビットフラグを利用してると思うから
&を使えばシンプルにすっきり書けるはずだよ。
- 66 名前:名前は開発中のものです。 mailto:sage [2008/11/09(日) 15:04:32 ID:wPDrFVAu]
- だれかDXライブラリで作ったすごいゲーム等紹介してください
- 67 名前:名前は開発中のものです。 mailto:sage [2008/11/09(日) 15:37:16 ID:d71QR9Rf]
- >>66がすごいと思うかは知らんが、
公式で紹介されてない所だと夜光蛾4とかDiadraEmptyとか。 同人系は「DXライブラリでここまで作れる」っていう良い例が多いな。
- 68 名前:名前は開発中のものです。 mailto:sage [2008/11/09(日) 16:53:27 ID:HksuFgRc]
- DiadraEmptyすげえな。
個人的にはモノリスフィア。
- 69 名前:名前は開発中のものです。 mailto:sage [2008/11/09(日) 17:01:59 ID:p4NI5+2s]
- >>66
四聖龍神録は?半オープンソースだし。
- 70 名前:名前は開発中のものです。 mailto:sage [2008/11/09(日) 18:19:57 ID:/7amOdfc]
- DXライブラリってDirectXのラッパーなんだから2Dならなんでもいけるだろ
- 71 名前:54 mailto:sage [2008/11/10(月) 00:04:21 ID:fweGd5hJ]
- >>55
描画先変更できたのかーー! こいつは便利だ 他にも見落としてる便利な関数あるかもと思って久しぶりに本家リファレンスページ見たら ”ドット単位で画像にアクセスしたい関係”ってのが追加されてて便利すぎフヒヒきゃっほう!!!11 もうひとつ質問です。DrawPolygon3Dかなにかで3D平面を、空気遠近法で表示させたいのですが 似非でもいいのでいい方法ないでしょうか
- 72 名前:名前は開発中のものです。 mailto:sage [2008/11/10(月) 17:51:27 ID:22QGh1G7]
- DrawPolygon3DのZ値を変えれば距離が変わるよ。
本家のリファレンスみたらわかるはず。
- 73 名前:名前は開発中のものです。 mailto:sage [2008/11/11(火) 01:35:00 ID:g6Sl8AVb]
- >>66
あとはゲームではないが ウディタ(WOLFRPGエディタ)もそうだ。
- 74 名前:名前は開発中のものです。 [2008/11/11(火) 16:04:15 ID:VHeofJsH]
- 8時から11階から目薬の企画実行移します。場所は↑のとこで。
参加者は今のとこ私の他は3人です。その後焼き鳥でも食べに行きましょう。
- 75 名前:名前は開発中のものです。 mailto:sage [2008/11/11(火) 19:37:44 ID:ktqf9Hz0]
- 最近のグラボは、古いDirectXにマトモに対応しておらず
DXライブラリもその煽りを食らってるって聞いたんだけど、どうなん?
- 76 名前:名前は開発中のものです。 mailto:sage [2008/11/12(水) 06:22:06 ID:yL4++M3C]
- そうなの?
9600GT,8800GTS,6600GTの3つ使ってるけどどれも不具合出たこと無いよ。 それよりVistaでたまにおかしなことになる・・。 同じコードで動かしてもXPとVistaじゃ違う挙動することが。 一つ一つのサンプル動かしても全然違わないんだけど、 スゲー大きなプログラムを動かしてみると違いが出てくることがある。 どうしてなんだろ・・。 DX管理人さんはそんなことないって言ってるから 自分のプログラムが悪いだけかもしれんが・・。 みんなそういうこと無い?
- 77 名前:名前は開発中のものです。 mailto:sage [2008/11/12(水) 08:00:35 ID:10ZLablI]
- >>76
VISTAに最初からはいってるのはDirectX10だからね。それも中途半端な。 MSの中途半端な対応のせいでゲーム開発者はみんな迷惑してる。 DirectX9とか新しいDirectX10とかを入れてみると改善すると思う。
- 78 名前:名前は開発中のものです。 mailto:sage [2008/11/12(水) 08:10:38 ID:wRCT4Vg2]
- >>76
ビデオドライバ類が関係しているとかないかな
- 79 名前:75 mailto:sage [2008/11/12(水) 18:00:22 ID:IPCAcIHc]
- グラボじゃなくてVistaってことかもしれん。
自分は持ってないんで確認できないまま適当に書いた、すまん。
- 80 名前:76 mailto:sage [2008/11/12(水) 20:17:02 ID:yL4++M3C]
- DirectX10の影響はいろいろ聞くね。
今度出るwindows7だっけ?あれはどうなるんだろう・・。 >>75 VistaとXPデュアルブートするといいよ。 作ったゲーム色んな環境で試してみれる
- 81 名前:名前は開発中のものです。 mailto:sage [2008/11/12(水) 20:59:00 ID:IPCAcIHc]
- >80
2000 orz
- 82 名前:名前は開発中のものです。 mailto:sage [2008/11/12(水) 22:09:52 ID:10ZLablI]
- Windows7でMSコケたらDirectX終わってLinux+OpenGLが盛んになる予感
- 83 名前:名前は開発中のものです。 mailto:sage [2008/11/13(木) 01:05:13 ID:mdnPfmFM]
- ビスタって結局なんだったんだ・・。
なんかうちの周りだと、PCに詳しくない奴が買ってるOSってイメージがある。 そのまま終わっていくのかビスタ。
- 84 名前:名前は開発中のものです。 mailto:sage [2008/11/13(木) 07:38:57 ID:lJxFlB+u]
- 諸刃の剣素人には(ry ってやつじゃない?
- 85 名前:名前は開発中のものです。 mailto:sage [2008/11/13(木) 19:45:16 ID:EnpEGfrm]
- >>83
ネットできりゃそれでいいってやつが買ってる印象だな あとはofficeでも使えりゃ困らないしな
- 86 名前:名前は開発中のものです。 mailto:sage [2008/11/13(木) 23:48:34 ID:mdnPfmFM]
- レンダリング処理やエンコードとかしても、ビスタは遅くてしかたないよ・・。
- 87 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 00:26:08 ID:5PrZBKJs]
- >>80
今時デュアルブートって流行らないんじゃない? VPCとかさ。
- 88 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 01:06:10 ID:71kfvXp8]
- 今の最新技術は知らんけど、VirtualPC、VMWareは
グラフィックボード使ってなくて、CPU依存
- 89 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 01:26:37 ID:ZojnRlhq]
- デュアルブートって流行ってるからとかでやるもんじゃないだろ
- 90 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 01:28:06 ID:5PrZBKJs]
- どこから突っ込めばいいのか…
- 91 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 01:28:54 ID:BF+CzcYi]
- >>90
つ*
- 92 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 13:57:39 ID:foiTr96E]
- 800*600のサイズでウインドウモードにしたいんだが、
SetGraphModeとChangeWindowModeを同時に使うと、 かなりの確率でOSごと落ちるorz
- 93 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 14:22:12 ID:foiTr96E]
- DxLib_Initの後にChangeWindowMode置いたらフリーズしなくなった
サーセンwwwフヒヒwwwww
- 94 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 14:48:29 ID:ZojnRlhq]
- >>93
初期化の前にウィンドウモードにした方が処理が早いよ
- 95 名前:名前は開発中のものです。 mailto:sage [2008/11/14(金) 14:50:12 ID:foiTr96E]
- 初期化(DxLib_Init)の前にSetGraphModeとChangeWindowMode書くと、
うちの環境ではなぜかフリーズするんです
- 96 名前:名前は開発中のものです。 [2008/11/15(土) 19:53:04 ID:MzdFlqka]
- 質問させてください
ゲームの速度をどのPCでも一定になるようにするために、 ScreenFlipを使う前と後の時間差を利用してる方法が本にあったのですが、 そもそもScreenFlip一回の時間はどのように決まっているのでしょうか?
- 97 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 20:12:06 ID:56rIt8Hu]
- リフレッシュレート。
画面のプロパティ→設定→詳細→モニタ で、リフレッシュレートが確認できる。 つってもこれは俺のPC(windows2000)だから他の環境だとちょっと違うかも。
- 98 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 20:17:30 ID:56rIt8Hu]
- 補足。
ScreenFlipがリフレッシュレート通りになるのは デフォルトで垂直同期信号待ちをしてるからであって、 「SetWaitVSyncFlag ScreenFlip関数実行時にCRTの垂直同期信号待ちをするかのフラグセット 」 で、垂直同期信号待ちを切った場合は関係ない。 また、条件は知らないが特定の環境(うちの場合はサブのノートPC)では 垂直同期信号待ち設定にしていても、ScreenFlipで垂直同期信号待ちしてくれない場合が ある事を確認済み。
- 99 名前:名前は開発中のものです。 [2008/11/15(土) 20:27:43 ID:MzdFlqka]
- >>97-98
返事ありがとう。 リフレッシュレート自体はわかったんですが 後半よくわからなかったのでちょっと調べてみます・・・。
- 100 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 20:51:40 ID:56rIt8Hu]
- >ScreenFlipを使う前と後の時間差を利用してる方法
ってのがどんなのか判らないけど、 ScreenFlipの垂直同期信号待ちを利用した方法だとすると 前述したようにリフレッシュレートに依存するから 「どのPCでも一定の速度」にはならないよ。 リフレッシュレートを60にしてるPCと70にしてるPCではスピードが違う。 まぁそれを踏まえた上でいちばん簡単で代表的な速度を一定にする方法なんだけどね。 (つまり、リフレッシュレートが60の場合を前提としてゲームを作り、 60以外にしてる人は60にしてからプレイしてください、となるw)
- 101 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:13:47 ID:56rIt8Hu]
- 垂直信号同期待ちについて、おおざっぱに説明してみようか。
俺も聞きかじりの知識だが。 最近はテレビにしろディスプレイにしろ、液晶が主流で「薄型」になってるが もしブラウン管(分厚い)のテレビなりディスプレイがあるなら、画面の前で手を振ってみるといい。 残像がぶつ切りに、ストップモーションのように見えるはずだ。 これはどういう事かというと、画面が60分の1秒に一回、点滅してるからそう見えるんだ。 (厳密には60分の1秒に画面半分) つまり、画面が光ってる時に「手の影が見えて」、画面が消えてる時には「見えない」から 手の動きがぶつ切りに見えるわけだ。 そうやって点滅してるのに、ずっと光ってるように見えるのは残像のせい。 もっとも「眼(瞳孔)」の方は反射で動いてるから、画面が光ってる時には瞳孔が小さくなり 画面が消えてる時は瞳孔が大きくなってたりするはず。 だから画面に近づいたり、暗い部屋で画面を見たりすると極端に眼が疲れる。
- 102 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:24:13 ID:56rIt8Hu]
- さて、画面が点滅してる、と言ったが、画面全体がぱっとついたり消えたりしてるわけじゃない。
ブラウン管ってのは、奥から電子ビームを画面に向けて照射して、その部分のみを光らせてるわけだから 実際に光ってるのは1点のみ。(もっとも一度照射されるとしばらくは持続するらしいが) その電子ビームの照準が、画面の左上から始まって、右端まで動き、 一段さがってまた左端から始まって右まで動き、を繰り返し、画面の右下まで進む。 つまり ┏━━━┓ ┃□ぬ□┃ ┃□る□┃ みたいな画面が表示されてると、それは実際は ┃□ぽ□┃ ┗━━━┛ ┏━━━┓ ┃□ぬ□┃ ┃■■■┃ ┃■■■┃ ┗━━━┛ ┏━━━┓ ┃■■■┃ ┃□る□┃ ┃■■■┃ ┗━━━┛ ┏━━━┓ ┃■■■┃ ┃■■■┃ ┃□ぽ□┃ ┗━━━┛ という感じで高速に書き換えられてるという事。
- 103 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:30:19 ID:56rIt8Hu]
- ここでゲームの話になるわけだが、ゲームのキャラクターは画面上をあちこちに動く事になる。
もしこの「動く」のが前述した「画面を書き換えてるタイミング」だったらどうなる? ┏━━━┓ ┃ぬ□□┃ ┃る□□┃ この状態から ┃ぽ□□┃ ┗━━━┛ ┏━━━┓ ┃□□ぬ┃ ┃□□る┃ この状態からにまで移動しようとすると ┃□□ぽ┃ ┗━━━┛ ┏━━━┓ ┃ぬ□□┃ ┃■■■┃ ┃■■■┃ ┗━━━┛ ┏━━━┓ ┃■■■┃ ┃□る□┃ ┃■■■┃ ┗━━━┛ ┏━━━┓ ┃■■■┃ ┃■■■┃という感じになり、 ┃□□ぽ┃ ┗━━━┛ ┏━━━┓ ┃ぬ□□┃ ┃□る□┃ 人間の目にはこう映ってしまう。この現象をティアリングと呼ぶ。 ┃□□ぽ┃ ┗━━━┛
- 104 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:38:19 ID:zVe3F0+t]
- >>100
「ScreenFlipを使う前と後の時間差を利用してる方法」ってのを普通に解釈したらリフレッシュレートに依存せずに一定になるよ。 ScreenFlipの待ち時間に関係なく、1フレーム(1ループ)の差時間から移動距離を割り出せばok。 ただし、ゲーム画面がアクティブでなくても実際に時間は経過してるので、ゲームに戻るとその分進む(進んだ)ことになる。 これを回避するなら、ゲーム内で独自にインクリメントカウントを設置し、そこから移動距離を割り出せばok。 ゲームプログラミング独特の考え方だね。
- 105 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:40:57 ID:zVe3F0+t]
- >>101
ブラウン管テレビは29.97fpsだよ。
- 106 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:41:23 ID:56rIt8Hu]
- このティアリング(ちらつき)をさせないためにはどうすればいいか?
これが「垂直同期信号待ち」であって、つまりは ディスプレイが画面全体の書き換えが終わるまで、 次の描画処理をしないで待ってるってわけだ。 これがScreenFlipではデフォルトで行われてる。 だからScreenFlipを使うと速度が一定に保たれる……のだが、 「画面の点滅は60分の1秒」と言ったが前述したが、これが要するにリフレッシュレートの事。 つまりこの速度をPC側で自由に変更できたりする。 リフレッシュレート60の場合はScreenFlipは60分の1秒経つまで待つわけだが、 リフレッシュレート70の場合は70分の1秒しか待ってくれない。 その分ゲーム速度は速くなってしまうわけだ。 (もしプログラム処理自体が重くて、70分の1秒で終わらなかったら 70分の2秒、つまり35分の1秒かかるわけで、逆に遅くなる)
- 107 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:47:42 ID:56rIt8Hu]
- 移動距離を割り出すという方法は知ってるし理屈も解るけど、
当たり判定もそれ相応の処理にしなくてはいけないし、 そうなるとリプレイ記録&再生をどうやればいいのかわからなくなる。 そこらへんはどうやってるのかな。 ってこれはDXライブラリと関係ないか。
- 108 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 21:57:26 ID:zVe3F0+t]
- 当たり判定もリプレイ記録も問題ないよ。
でもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから あたかもScreenFlipを使うとスピードがリフレッシュレート依存になるみたいな解説はやめたほうがいいと思うよ。
- 109 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 22:29:29 ID:PnDW3j7Q]
- 画面を書き換えたときに時間を取得し、前回取得した時間と比較して、
1ループが17ミリ秒(60FPS)になるまでウェイトをかけてやればいい これが一番簡単で確実
- 110 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 22:34:05 ID:RlpGwAN3]
- リフレッシュレートが60のときはScreenFlip依存でいいんじゃね
それ以外はタイマで
- 111 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 23:12:07 ID:56rIt8Hu]
- >でもScreenFlipの待ち時間を基準にするなんて誰もしないと思うから
いや、俺してたし、してるしw
- 112 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 23:32:40 ID:zVe3F0+t]
- >>111
その話をしてるのは君だけど、実際にそれを採用してる人はいないって事だよ。 もしかして君は採用もしてるの? だとしたら自分が長々と説明したデメリットが解消できてないよね。 それを解消したくて質問したいならそれなりの場所でそれなりの質問方法を取ればいいと思うよ。 もしそうじゃないなら誰も採用しない方法を解説されてもややこしくなるだけだから…。
- 113 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 23:41:52 ID:56rIt8Hu]
- ティアリングが嫌だから切り替え方式にしてるます。
最初はゲーム起動時に測って自動切換えにしてたけど それもやめて結局手動切り替えに……。
- 114 名前:名前は開発中のものです。 mailto:sage [2008/11/15(土) 23:43:35 ID:56rIt8Hu]
- 切り替えってのはリフレッシュレート依存方法と、タイマでウェイトかける方法の二つね。
移動距離算出方法はやった事ないです。
- 115 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 00:40:12 ID:H38ODQJJ]
- ティアリングとスピードは関係ないでしょう。
とりあえずDXライブラリを使うならScreenFlip()で垂直同期を待てば良いと思うよ。 スピードの話はまた別の話。 >>113 ゲーム起動時に何を測るの? それと、切り替える必要性が見えないんだけど・・・?
- 116 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 01:43:29 ID:Hwka3oLK]
- >>115
>ゲーム起動時に何を測るの? ScreenFlipを一秒間繰り返して、その回数で判断。 >>98で書いたけど、垂直同期信号待ちをしてるはずなのに ScreenFlipで待ってくれない場合があるから、 FPS値が異常に高かったらそうだと判断して タイマー値によるウェイトかけるようにしてた。 >それと、切り替える必要性が見えないんだけど・・・? それはどっちを基準にして? ScreenFlipを基本として考えるなら、リフレッシュレートが変更された場合や 上で書いた垂直同期信号待ちしてくれない環境の時に異状スピードになってしまう。 タイマ値でウェイトかける場合は、やっぱりティアリングが気になるし、 1フレームごとに点滅するエフェクトとかがきちんと点滅しなくなる。
- 117 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 02:40:28 ID:H38ODQJJ]
- >>116
えっと、だからね、ScreenFlipとティアリングは関係あるけど、 それらとウェイトは関係ないって事だよ。 ゲーム起動時にScreenFlipの待ち時間からリフレッシュレートを判断してるようだけど、 それも結局ScreenFlip基準でタイマー取る方式だよね。 てことは例えば60Hzを基準にウェイトをかけるって事だよね。 だとしたらはじめからリフレッシュレートのウェイトなんかに頼らずに、 マルチメディアタイマーででも1/60sを基準にコードを書けばいいでしょ? だから起動時に測る必要もないし、リフレッシュレートの変更やVsyncを待たない場合は考慮しなくていいの。 繰り返すけど、タイマーでウェイトかけてもScreenFlipを使うならティアリングはないよ。
- 118 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 03:40:07 ID:Hwka3oLK]
- 何か齟齬がある気がする。
タイマでウェイトかける場合は、ScreenFlipのVsync待ちはOFFにしてあるんだけど、 それでもティアリングは発生しない? んじゃ発生してる俺のプログラムは何か間違ってるのか。 理屈上、1/60sを基準にウェイトかけるようにすれば ゲームスピードは一定になるが、タイミング次第で ティアリングが発生しない状態か、 あるいはティアリングが発生し続ける状態が 維持されるものだと思っていたのだが。
- 119 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 04:22:31 ID:H38ODQJJ]
- Vsync待ち、かつ、タイマーで制御するんだよ。
これを前提に最初から読み返してみて。
- 120 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 14:59:43 ID:Yf+kFgNP]
- ScreenFlipもやって、1/60secも待って、ってやらないと一定にならないし、ちらつきも解消されないよ。
- 121 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 17:43:53 ID:fHnaEgZY]
- タイマー待ちを使うんならVsync待ち無しのScreenFlipじゃないと
ティアリングは発生しないけど動きが凄いガクつくぞ ADVみたいに動きの少ないゲームならそれでも良いと思うけど、 STGやACTでは見るに耐えない
- 122 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 18:33:07 ID:H38ODQJJ]
- 60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。
75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。 ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。 >>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。 ティアリングするわfps制限されてるわでひどいもんですわ。
- 123 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 21:17:57 ID:gVsDrcFZ]
- >>102-103
ガッ
- 124 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 21:57:20 ID:fHnaEgZY]
- >>122
なんでそんなに相手を見下したような態度なの? >60Hzに合わせれば60Hzの環境なら結局タイマーでウェイトしないから問題ないよ。 それはわかってるよ だから最初にリフレッシュレート測って垂直同期主体にするかタイマー同期にするか判断するんでしょ? 121はあくまでfpsとリフレッシュレートが一致していない場合の話 >75Hzの環境なら60fpsに制限されるから多少はガクつくけどこれはトレードだね。 ここで122の言うとおり垂直同期とるかとらないかはプレイヤーの好みの問題 オプションで選択できるようにすべきだと思う >ちなみに3Dモノとか海外のゲームはfpsを出来るだけあげて垂直同期しないっていうのが主流みたい。 そうだね。3Dモノは可変fpsと相性良いよね。 >>121みたいにfps制限はするわ垂直同期しないわっていうのは愚の骨頂。 垂直同期をとらないことで手軽に入力に対するレイテンシを下げることができるし、 リプレイを取る目的でfpsを固定しなければならない場合もあるんだから、 短絡的に愚の骨頂というのはどうだろう 122的には60fps固定+垂直同期してない東方緋想天は愚の骨頂? 俺はそうは思わないけど・・・
- 125 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 22:50:57 ID:5RilDqvE]
- 2Dシューティングを過去いくつか作ってきましたが、
リプレイ周りの実装も含めて、やっぱりFPSは60に固定でロジックを組みますよ。 オプションで「Vsync待ちをするかタイマーか」を選択させてます。 124さんもリプレイの話をしているから、そういう前提で言ってるのだと思うのですが。
- 126 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 23:07:43 ID:xtMr6+ch]
- リプレイって別にFPS固定必要ないような
入力があったキーとその時の経過フレーム数があればいいんだし
- 127 名前:名前は開発中のものです。 mailto:sage [2008/11/16(日) 23:30:59 ID:0yDeWpwc]
- おまいら もちつけよ.
- 128 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 01:36:47 ID:GetktCW+]
- >>124
何そのゲーム。>東方なんたら 最悪だね〜。 >>126 だよねぇ。
- 129 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 03:32:51 ID:qWlXMT4E]
- なんだ釣りか
- 130 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 18:51:51 ID:TAngTg8T]
- なんだこんなすばらしいスレがあったのか>>1乙
- 131 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 21:49:06 ID:E1tboJG/]
- DXライブラリで作った横スクロールアクションのソースってどこかに転がってない?
- 132 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 22:00:58 ID:tSUha7RY]
- 転がってるって・・・
作者の好意で公開してるソースをそんな言い方するなよ
- 133 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 22:04:49 ID:Zhr1hzWJ]
- ニコニコで一時話題になった、しかけが外道なスーパーマリオもどきはソース公開してたと思う
- 134 名前:125 mailto:sage [2008/11/17(月) 22:57:25 ID:pxmPH9a8]
- >126
たしかにそうですね。 ただ、自分の場合は、FPSを固定すればあとはキー入力さえきちんと記録できていれば リフレッシュレートが違えどもリプレイがずれることがないのでそうしていました。
- 135 名前:名前は開発中のものです。 mailto:sage [2008/11/17(月) 23:31:08 ID:OriaVhLm]
- 移動量固定方式か、経過時間による移動量計算方式かで
やり方も違ってくるんじゃないかな。
- 136 名前:名前は開発中のものです。 mailto:sage [2008/11/18(火) 13:05:35 ID:FZcPiuDy]
- >>133
しょぼんのアクション だっけ? やっと1−1クリアだと思ったのに愕然とした記憶がある。
- 137 名前:名前は開発中のものです。 mailto:sage [2008/11/19(水) 13:43:13 ID:xnzA6xl6]
- DirectXのバージョンを9に移行するらしいね
- 138 名前:名前は開発中のものです。 [2008/11/19(水) 14:54:42 ID:TpPgoKXn]
- >>133
あれはやばいです あれはほんとうに・・やばい・・。 この道10年のベテランですらあれを見ると悶絶して悶え死ぬレベル。 あのソースを読んだあの日、私は自分の人生について考えさせられました。
- 139 名前:名前は開発中のものです。 mailto:sage [2008/11/19(水) 15:08:39 ID:lxkh5WN5]
- そんなにすばらしいのか
- 140 名前:名前は開発中のものです。 mailto:sage [2008/11/19(水) 15:11:10 ID:Lz0a0oQh]
- 思わず3回DLし直す位のレベル
- 141 名前:名前は開発中のものです。 [2008/11/19(水) 18:41:54 ID:TpPgoKXn]
- あれは伝説のソースですよ
- 142 名前:名前は開発中のものです。 mailto:sage [2008/11/20(木) 23:58:11 ID:UIc9LZep]
- DLしてみたが・・・凄まじいソースだな
- 143 名前:名前は開発中のものです。 mailto:sage [2008/11/21(金) 00:08:16 ID:AZA6fSH/]
- 俺のソースも似たようなもんだなw
- 144 名前:名前は開発中のものです。 mailto:sage [2008/11/21(金) 00:14:35 ID:IPu5qEL0]
- 汚いコード書ける奴って尊敬するわ
むしろ逆に頭良いと思う
|

|