[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/06 15:12 / Filesize : 249 KB / Number-of Response : 832
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

DXライブラリ 総合スレッド 2008



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/

10 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 22:29:25 ID:Vt8TEo7A]
個人的な意見を言えば、次スレからは前スレで結構話題になった、
DXライブラリ3DのURLもテンプレに入れた方が良いと思う。
私は結構期待しているし、私以外にも注目している人は多いはず。

というわけで自分なりにテンプレ入れてみる。


また、DXライブラリと互換性を持ったライブラリ、
「DXライブラリ3D」が開発も非公式ながらも行われている。
DXライブラリ3Dを用いることにより、DXライブラリの機能に加え、
3Dの処理を容易に行えることが期待できる。
fatalita.sakura.ne.jp/3DLib/

11 名前:10 mailto:sage [2008/10/25(土) 22:30:40 ID:Vt8TEo7A]
>>9
かぶった。
スマソ。

12 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 23:34:54 ID:BCFbbKco]
>>9-10
FireFox3なんだけどそのリンク先、マウスにDxMainの透明ソースがくっついてはがれなくてクリックできない。

あ、実はDirectXについて調べててたまたま来ただけなんですが、ちょうど埋まってたので立ててみました。
DXライブラリの歴史は古いっぽいからスレタイの番号抜けちゃったのかなと年を入れて見たんですが、
次スレは2009年になりそうだしかまわないかなと。

僕がやりたかったのはDirectX使うゲームの画面をDirectXで静止画キャプチャなんですが、
DirectXでキャプチャするというHyperSnapでキャプチャしても画面が一瞬ロックしちゃうんであきらめました。
いろんなところにもBitBltより遅くなるって書いてあったし。
どんなゲームでもロックするとは限らないけど、ネトゲのセキュリティ機能が影響してるかもしれない。
廃スペックな人からは「そんなロックかからないよ」って言われたし、スペックでカバーできるっぽいし。

こういったライブラリは自前窓への描画や画面への出力前提だろうから、方向性もちょっと違いましたね。


13 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 23:54:35 ID:ZbA2BxSK]
たまたま来てスレ立てとな!

14 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 23:56:47 ID:4olZVcWC]
シルバーガンとかレイストームみたいな奴を手っ取り早く作りたい!
……って時には結構強いよね、3D版。

ポリゴンモデルを用意できるかどうかは別として。

15 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 14:23:21 ID:Jt+1Mejf]
>>12
クリックできないとは?
うちもFirefox3だけど問題ないが

16 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 15:24:06 ID:nBdNvLmf]
DXライブラリの参考になるサイトも一通りテンプレにいれたらいいのに

17 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 22:20:31 ID:nZeh8WoA]
DXライブラリで、超単純な当たり判定ってどんなのがある?

画像が重なった瞬間消すだけでもいいんだけど、どうすればいいかよくわからん

18 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 22:24:13 ID:OObvFpvs]
DXライブラリで、ってのがよく分からんが、ごく普通の当たり判定じゃダメなのか。
最も単純って言うと、

 if ( x1 == x2 && y1 == y2 )

とか?



19 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 22:48:15 ID:zN//f5BC]
矩形の当たり判定が基本でしょ

20 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 23:21:07 ID:nBdNvLmf]
円の当たり判定が一番簡単じゃない?
普通にピタゴラスの定理使えばいいだけ

21 名前:18 mailto:sage [2008/10/27(月) 23:28:42 ID:OObvFpvs]
ぶっちゃけどれも基本だよな。

22 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 23:42:59 ID:zN//f5BC]
円の当たり判定はベクトル使うと異常に綺麗に書けるよね

23 名前:名前は開発中のものです。 mailto:sage [2008/10/27(月) 23:52:30 ID:nBdNvLmf]
>>22
ピタゴラスの定理より簡単になるの?

24 名前:名前は開発中のものです。 mailto:sage [2008/10/28(火) 09:43:23 ID:/xky1qOF]
通過しちゃったやつも当たったと判定しなきゃならんこともあるし

25 名前:名前は開発中のものです。 mailto:sage [2008/10/28(火) 10:06:09 ID:jGlZfuVr]
ベクトル使うと当たり判定が菱形にならないか?

26 名前:名前は開発中のものです。 [2008/10/28(火) 11:15:02 ID:Ot+vqO8g]
>>24
あるあるw 処理時間の関係でどうしてもなるよな。あれが厄介

27 名前:名前は開発中のものです。 mailto:sage [2008/10/28(火) 19:25:08 ID:Ot+vqO8g]
www.nicovideo.jp/watch/sm5018275
DXライブラリ3Dの動画発見した

28 名前:名前は開発中のものです。 mailto:sage [2008/10/28(火) 21:25:44 ID:mug6SHfM]
ニコニコでDXライブラリで検索したら16件ほど出てくるのね



29 名前:名前は開発中のものです。 mailto:sage [2008/10/29(水) 04:50:01 ID:yue3f1oW]
>>26
あれは線と線の交差を計算するだけ


30 名前:名前は開発中のものです。 [2008/10/29(水) 04:51:17 ID:HeG9A7jn]
>>29 kwsk

31 名前:名前は開発中のものです。 [2008/10/29(水) 05:21:45 ID:yue3f1oW]
>>30
移動前と後の座標間を結ぶ線を引く。線を引くといっても直進なら2つの座標が直線を表す式になる。
直線1本を座標変換によってX軸と一致すると仮定する。
検査対象のオブジェクトのY座標が全てプラスまたは全てマイナスなら交差していない。

検査対象が1本の直線だとしよう。
直線は2つの座標で表されるので、その座標がプラスとマイナス座標の組み合わせなら交差していることになる。
数学では交点を求めるが、交差のみ検査するなら、Y座標だけ調べればいい。
二つの座標を(x1,y1)と(x2,y2)として、y1×y2がプラスなら交差なし、マイナスなら交差ありになる。
ポリゴンは線の集合なので、ポリゴンを構成する全ての直線についてこの計算をするもよし、
正の座標と負の座標それぞれの数を数えるもよし。

座標変換については高校数学で習うけど、ゆとり教育の今は大学まで進まないと習わないだろうね。
コンピューターグラフィックとかシミュレーションやるなら絶対必要な数学なんだけど、
大学生になってから学び始めても理解できるわけがない。
ようするに日本人は優秀なプログラマにはなれない。


32 名前:名前は開発中のものです。 mailto:sage [2008/10/29(水) 08:48:56 ID:46mBxw3n]
論理飛躍しすぎだろjk

33 名前:名前は開発中のものです。 mailto:sage [2008/10/29(水) 15:25:49 ID:S9yFdqtr]
>>31
>Y座標だけ調べればいい。

という意味がわからん・・。
x軸と一致するように回転した線分の定義域x0の範囲を
x01< x0 <x02
としたら、この範囲の中でyの掛け算結果がマイナスになれば交差とわかるけど。
もし交点がこのx0の範囲じゃないところで交差していたらどうするの?
直線と直線の交差ならこれでいけるけど、
使いたいときってほとんど線分と線分じゃない?

34 名前:名前は開発中のものです。 [2008/10/29(水) 15:36:57 ID:HeG9A7jn]
>>33
横レスすみません。直線と線分って定義上違うんですか?
直線と長方形という意味でしょうか?

35 名前:名前は開発中のものです。 mailto:sage [2008/10/29(水) 15:41:55 ID:p+8U8df2]
>>34
直線の長さは無限大。(線分には端が存在するが、直線には端が存在しない)
だから、二本の直線は必ず交差する

注1 並行である場合を除く
注2 2Dの場合に限定

36 名前:名前は開発中のものです。 [2008/10/29(水) 15:45:07 ID:HeG9A7jn]
>>35
詳しい説明ありがとうございました。なるほどそういう違いがあるんですね。

37 名前:名前は開発中のものです。 mailto:sage [2008/10/31(金) 03:09:52 ID:wPwg2eVl]
結局>>31の方法で線分の交差は判定できるの?

38 名前:31 mailto:sage [2008/10/31(金) 06:44:39 ID:SBgHi4S/]
直線と言ってしまったのは悪かった。
まあ確かに>>33の言うとおり、x座標の範囲も見ないと実際は分からないけど、
直線とみなさないとy座標だけでは上にあるとも下にあるとも言えないから。

両方を直線とみなせば並行じゃない場合必ず交差する。
でも、平行じゃない直線が取るx座標、y座標は無限となるでしょ。
y座標のみ見るというのは、点として見ているから交差しない。
僕が言いたかったのは、基本的には数学の計算を利用するけど、交点まで求める必要はないということ。

計算手順としては、座標変換後、それぞれのx座標のみについて基準の線分の範囲内にあるかどうかを見て、
次に>>31で説明したようにy座標のみを見れば大体判断できる。
x座標が範囲の内と外をまたぐ線はあいまいだけど、
基準線の交差する側の端点を基準にしてx成分とy成分の比率を見れば交差するかどうかが分かる。

ちなみにこの計算方法はキャノンが特許申請してるが
常識なので却下するべき。
www.j-tokkyo.com/2003/G06T/JP2003-085568.shtml




39 名前:名前は開発中のものです。 mailto:sage [2008/10/31(金) 07:17:25 ID:2oP1KQG/]
こんなのが特許なら俺のソースは特許500個くらいあるな。

40 名前:名前は開発中のものです。 mailto:sage [2008/10/31(金) 07:37:16 ID:ypJM5WNC]
>>31
あんた詳しいな。いろいろと。差し支えなければ職業とか聞きたい。

41 名前:名前は開発中のものです。 mailto:sage [2008/10/31(金) 20:29:02 ID:2jgW7Qyq]
この休みはゲーム作るか……

42 名前:名前は開発中のものです。 mailto:sage [2008/11/01(土) 15:44:46 ID:NPyLG5nz]
ポリゴンもそうだが球の当たり判定でいくのが一番簡単
中心と半径だけで計算できる。


43 名前:名前は開発中のものです。 mailto:sage [2008/11/02(日) 08:06:57 ID:lCIgFzJ9]
何気なく質問した当たり判定だけどピンキリだって事だな

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依存でいいんじゃね
それ以外はタイマで






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef