トップページgamedev
1001コメント351KB

【初心者歓迎】スレを立てる前にココで質問を【Part9】

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2005/09/24(土) 09:36:08ID:qEhFu+JA
疑問に思うことがあれば、スレを立てずに、まずはココで質問。
スレッドを立てる前にはローカルルールを読みましょう。
http://pc8.2ch.net/gamedev/

>>980 を踏んだ人は次スレ立てをお願いします。

その他は>>2-10ぐらい
0112名前は開発中のものです。2005/10/07(金) 08:39:12ID:p+JYUjXY
>>110
DirectX SDKのSkinnedMeshサンプル

昔はシェーダもアセンブリコードっぽいもの使ってたけど
あのころのSDKのSkinnedMeshサンプルはありえんくらいソースが難解だったw
今のSDKのはものすげー簡単
でも昔の奴で勉強したほうが色々と勉強にはなるかもね
0113名前は開発中のものです。2005/10/07(金) 09:11:32ID:p+JYUjXY
>>111
ディスプレイは完全な60Hzではないからな。
この辺色々調べたんだけど、今のところ俺はこんな感じにしてる。

なぜガクーンってなるかっつーと、モニタとPCの誤差が徐々にたまって、
特定のフレームだけ極端な短時間しか与えられなくなるから。
で、そのシワ寄せが次のフレームに回ったりして、ガクーンってなる。

ということは1フレームあたり常に一定時間確保できるようにすればいい。
これは垂直同期を取れば解決できる。1フレームあたりきちんと16ms確保できるから。
だけど単にPresentに頼るだけの同期は、DirectXのトリプルバッファの罠で入力遅延にハマる。

でもこちらとしては、遅延が起こらないように画面への転送が終わるのを待ちつつ入力時間を確保したい。
そこで内部ループを120fpsとか240fpsとかの倍速でまわして、
実際に更新するのは2回に1回とか4回に1回とかにしてしまう。
これだと、例えば内部120fpsなら8ms、240fpsなら12msだけの計算時間が保障される。
という感じ。今のところこれで滑らかに動いてるよん
0114名前は開発中のものです。2005/10/07(金) 12:36:58ID:p3LHIarS
>>111
timeBeginPeriodやってる?
01151112005/10/07(金) 23:24:23ID:pag8gmHY
>>113
おお! 倍速ですか。 試してみます。

>>114
使ってます。
0116名前は開発中のものです。2005/10/09(日) 00:20:40ID:xzKm4YcS
すみません、質問です
現在、BCC5.5とDirectXを利用してゲームを作ろうと四苦八苦しています。
しかし、今の状況だと実行ファイルのほかに「d3d8d.dll」と「d3dx8d.dll」
の二つのファイルが同一フォルダに必要になってしまうようです。
そこで、質問なのですが、コンパイル時にこれらのDLLを実行ファイルに
含めてしまうようなことは出来ないのでしょうか?
0117名前は開発中のものです。2005/10/09(日) 01:32:20ID:HXMGSzXF
>>116
そのDLL、デバッグ用じゃね?
完成版ならちゃんとリリースでビルドすりゃ問題ないと思うんだけど

質問のほうの答えはいろんな意味で無理
0118名前は開発中のものです。2005/10/09(日) 01:36:38ID:zXPC8RYk
Makefile に書けばできないことはないだろうけど、まあそれよりはリリースビルドにすることだね。
0119名前は開発中のものです。2005/10/09(日) 10:25:50ID:LVp1oOH8
PCでゲームを作ろうと思っているのですが音を再生するライブラリってどんなものが
あるのか教えていただきたいです。やりたいことはピッチの変更・パンの設定・3Dサウンド
ボリュームの設定、以上のことができるライブラリってありますか?
0120名前は開発中のものです。2005/10/09(日) 10:30:50ID:jeRoAyM3
あるよ
0121名前は開発中のものです。2005/10/09(日) 13:14:07ID:f299ZHV0
>>119
そんな曖昧な質問しちゃう子にはOpenAL薦めちゃう
0122名前は開発中のものです。2005/10/09(日) 15:33:10ID:LVp1oOH8
DirectMusic又はDirectSoundでは3Dサウンドと周波数(ピッチ)の変更が個別では
提供されているものの両方をともに反映するこは不可能みたいなのでそれに変わる
何かはないかなとおもって探してます。DirectXでもそれを可能にする方法があるの
ならいいんですけどどうでしょう
0123名前は開発中のものです。2005/10/09(日) 15:48:53ID:fwcbNJiA
画像の管理の仕方なんですが、たとえば、RPGで主人公(上下左右向いている画像)と
王様(上下左右向いている画像)の2人のイメージを使うとします。
この場合、主人公.gif、王様.gifのように別々のファイルに入れておくより、
キャラ.gifみたいに全部のキャラクタを1つのファイルに入れて表示するときに
座標で切り出した方がいいのでしょうか?
0124名前は開発中のものです。2005/10/09(日) 16:00:26ID:jeRoAyM3
3D機能を使って描画するならテクスチャは纏めておいた方が高速だよ
0125名前は開発中のものです。2005/10/09(日) 16:24:56ID:fwcbNJiA
わけておくと最初の読み込みのときに時間かかるだけじゃないんですか?
メモリに読み込まれればどっちでも速度同じようなきがしますが。
0126名前は開発中のものです。2005/10/09(日) 16:31:07ID:F9AalQ/U
>>122
それってBBXでまともなレス貰えなかったから再質問ってこと?

>両方をともに反映するこは不可能みたいなので
どこかに不可能とか書いてあった?

最小限だけ書くと
CTRL3DとCTRLFREQUENCYを含めてCreateSoundBuffer → 仮のサウンドバッファ
仮のサウンドバッファでDirectSoundBufferをQueryInterface → セカンダリ
セカンダリでDirectSound3DBufferをQueryInterface → 3Dサウンド

これでセカンダリで周波数かえて3Dサウンドできる
0127名前は開発中のものです。2005/10/09(日) 18:16:36ID:jeRoAyM3
>>125
DIBSectionで描画するなら、どっちでも変わらんけどな
0128名前は開発中のものです。2005/10/09(日) 18:34:59ID:e2HD5jDO
シーンによって必要な画像だけメモリに読み込みたい場合は、
ファイルで分けておいた方が楽なんじゃない?
0129名前は開発中のものです。2005/10/09(日) 18:51:29ID:ReCOUUov
結論:好きなようにしろ
0130名前は開発中のものです。2005/10/09(日) 19:01:20ID:vr4yu5Er
今のマシンだと、昔ほどメモリーで困る事は無い品。
0131名前は開発中のものです。2005/10/11(火) 22:20:26ID:Yuz9SVMt
必ずwindows用のゲームつくるにはwinAPIを勉強しなければダメですか?
最終的にはdirectXを使ったゲームを作りたいんですが、c、c++と勉強して
きてその次が困っています。 

いきなりdirectXを勉強して、c/c++とdirectXだけでゲームって作れるんで
しょうか?
0132名前は開発中のものです。2005/10/11(火) 22:28:38ID:Rbj57KHl
最低限のAPIは、覚える必要がある罠。
0133名前は開発中のものです。2005/10/11(火) 22:43:59ID:TNnd01dM
>>131
そんな詳しくは学ばなくてもいいが、やっぱウィンドウ作ったりはしなきゃあかん。
WM_CHARとかその辺のメッセージの類とかも少し独特だし。

俺はあまりWinAPIにはあまり詳しくないが
一応PetzoldのProgrammingWindowsでやる程度のことは一通りやったかな
まあやって損は無いよ
0134名前は開発中のものです。2005/10/11(火) 23:15:26ID:Yuz9SVMt
ありがとうございました。 ネットでいろいろ調べて基本的なAPIを
勉強します。

ネットで限界があったら本で勉強してみようと思います
0135名前は開発中のものです。2005/10/11(火) 23:59:03ID:maggXHJ/
ツールとか作ろうと思うとWin32の壁が orz
0136名前は開発中のものです。2005/10/12(水) 00:03:11ID:P7mB6rCy
WinAPIがよく分かってなかった当時
ゲーム開発用ツールをゲームに直接組み込んだ変態さんならここにいるぞ
0137名前は開発中のものです。2005/10/12(水) 01:39:42ID:cZKjHNuo
漏れは自前でスクリプト作ってみた。
0138名前は開発中のものです。2005/10/12(水) 01:45:41ID:DgYdUmXc
自前スクリプト言語は、多くのプログラマが誘惑される甘い蜜である。
しかし有意な結果を生む事は非常に稀である。
0139名前は開発中のものです。2005/10/12(水) 01:52:38ID:cZKjHNuo
意外と技術力が要るからなぁ・・・
0140名前は開発中のものです。2005/10/12(水) 02:02:56ID:JU9C54Np
bison/flexってどうなん?
つかったことないんだけど
0141名前は開発中のものです。2005/10/12(水) 02:11:17ID:l3gh/HA2
>>140
古参なりに信頼性はある。(メモリを少々食うけど)
GNU flexは日本語の扱いに弱いので、字句解析だけ自前で用意する人もいる。
どの道、本当に使いこなしたいならドラゴンブックなり何なりで勉強しないと始まらない。
0142名前は開発中のものです。2005/10/12(水) 02:13:17ID:JU9C54Np
>>141
なるほど。
トークナイザ書くくらいなら困らないし
パーサだけ作ってもらえば後はどうにかなるか?
勉強してみるかな。サンキュー
0143名前は開発中のものです。2005/10/12(水) 03:39:31ID:8I3SqoJM
DirectSoundでOGG→WAVでいまだに悩んでいる人間です。
ソースを見ていただいたてどこがおかしいか見て頂きたいんですが
どこにあげたらいいですかね?
0144名前は開発中のものです。2005/10/12(水) 12:11:27ID:JU9C54Np
>>143
http://gamdev.org/up/
にあげたら誰か見てくれるかもね

てゆーかDirectSoundが駄目なのか、Ogg→Waveが駄目なのか、
どちらが駄目なのかの検討くらい付けたほうがいいかと
0145名前は開発中のものです。2005/10/12(水) 23:18:32ID:6F5TbDu1
>>143
ttp://www.geocities.jp/toru_website/
ここに書いてあるのじゃダメなん?

オイラは、WAVに戻すとえらいメモリ食うから
そのままストリーミング再生するようにしたがな
0146名前は開発中のものです。2005/10/12(水) 23:35:58ID:GqMDvJYY
ソース上げました。oggというコメントで上げました。
どなたか助けてください。Ogg→Waveがダメだと思います。
セカンダリの作成失敗というエラーメッセージがくるのでそこがおかしいと
思うのですがOGG→WAVに変換するのはサイトからのコピーを少し変えただけなので
問題ないと思うのですがどなたか見ていただければうれしいです。
0147名前は開発中のものです。2005/10/12(水) 23:42:29ID:JU9C54Np
>>146
セカンダリの作成失敗というエラーメッセージはどこから出てきてるんだ?
もしかして579行目?
0148名前は開発中のものです。2005/10/13(木) 00:29:37ID:nk0Vsn5q
そうです
0149名前は開発中のものです。2005/10/13(木) 00:39:00ID:ucG7VMXi
>>148
そこでエラーが出るってことは、
>hr = lpDS->CreateSoundBuffer( &dsbdesc, &lpDSB, NULL );
ここでエラーが出てるんだろ。

てことは、dsbdescの値がおかしいからエラーになってると限定できる。
hrの値は何になってんの?

っていう風にバグの原因を追求していけばいい。
漠然と全体像を見たって原因なんてわかりっこない。
0150名前は開発中のものです。2005/10/13(木) 00:41:54ID:o2drwFLB
エラー処理をちゃんとやってる真面目なコードだなー
0151名前は開発中のものです。2005/10/13(木) 01:14:01ID:AjuZ34TW
戻り値で11種類も原因が分けられてるのに・・・

>思うのですがOGG→WAVに変換するのはサイトからのコピーを少し変えただけなので
その変更が原因だったらワロス
0152名前は開発中のものです。2005/10/13(木) 09:38:10ID:tiAg0zE5
>150

そういう真面目な人に限って変な女に騙されるんだよね
0153名前は開発中のものです。2005/10/13(木) 11:33:26ID:ucG7VMXi
きついことを言うが真面目かどうか以前の問題だろ。
エラー処理を真面目にする意味が分かってない奴には、
エラー処理を真面目にする意味が無い。
0154名前は開発中のものです。2005/10/13(木) 13:15:52ID:o2drwFLB
>>153
質問してる奴が書いたんじゃないだろ。コピペ元が綺麗にやってるだけで。
0155名前は開発中のものです。2005/10/13(木) 17:04:52ID:0JcB9+sp
ソース見てどんな処理やってるのか理解できないとコピペしてもねえ
0156名前は開発中のものです。2005/10/13(木) 19:14:51ID:n2LpF+oD
Lunaを使ってゲームを作っているのですが
3D空間上の物体をマウスで選択するのに、マウスの座標と3D空間上の座標がまったく違うので
どう当たり判定処理をすればいいのかわかりません。

どうすればいいですか?
0157名前は開発中のものです。2005/10/13(木) 19:30:46ID:ucG7VMXi
普段、頂点変換をどうやってるか考えてみれ。
ワールド空間→カメラ空間→射影空間→スクリーン座標
ってやってるっしょ?だから、これの逆を辿ればいい。

射影空間からスクリーン座標への変換はDirect3Dがやってるので注意。
あとスクリーン座標での点は3D空間では直線になる。
0158名前は開発中のものです。2005/10/13(木) 21:32:51ID:70U5PiPV
DirectMusicのMIDI再生機能についての仕様って
具体的には公開されていないのでしょうか?

ググってもどうもそれらしい情報が見つからないのですが…。
0159名前は開発中のものです。2005/10/14(金) 05:42:08ID:l5BBzuO1
探している情報とは違うかもしれんが、参考になるかも
ttp://www.microsoft.com/japan/msdn/directx/backgrnd/html/dmapi_faq.asp
0160名前は開発中のものです。2005/10/14(金) 05:45:43ID:l5BBzuO1
どちらかというとMIDI規格を理解する必要があるんじゃないかと思ってみたりもするのだが
ttp://www.pluto.dti.ne.jp/~daiki/Midi/Midi.html
0161名前は開発中のものです。2005/10/14(金) 08:58:08ID:Zlk2XPE+
DirectX9環境の3Dにてアルファ付きテスクチャ(DDS)を使って
通常は、黒抜き表示をしているのですが
そのテスクチャをどんどん透明にして消す方法がウマくいきません
アルファ値を動的に変える方法をとっても、逆に黒い部分が浮かび
あがってきたりと・・・orz
教えてはいただけませんか、お願いします。
0162名前は開発中のものです。2005/10/14(金) 09:56:15ID:54HgW6Mn
>>161
普通にアルファ値を1→0に変えていけば上手くいくと思うけれど。
アルファ値は、黒い部分は0、絵の部分は1、になってる?
01631612005/10/14(金) 17:22:07ID:Zlk2XPE+
>>162
レスありがとうございます。

>アルファ値は、黒い部分は0、絵の部分は1、になってる?
元絵をグレイスケール処理し、それをαチャネルとして読み込み
テスクチャ(DDS)を作っているので・・・黒い部分が0で他が1以下とかに
なってないのかなぁ・・・
テスクチャのα値を0(真っ黒)にすれば消えてくのは分かるのですが
それを、どう設定すれば動的に設定できるのか?が分からなくて
困っています。 よろしくお願いします。 orz



0164名前は開発中のものです。2005/10/14(金) 18:22:30ID:54HgW6Mn
>>163
アルファチャネルが一切含まれない普通の画像を消すことができないとお話にならないな。
アルファチャネルが含まれるほうは、そのあとやってみれ。

画像を張り付けるために使った4頂点に頂点カラーを与えて、
そのアルファ値を徐々に減らしていけば、いけるはず。

忘れてはいないと思うけど、これも忘れずに。
SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DCOLOROP_MODULATE );
01651612005/10/14(金) 21:04:58ID:Zlk2XPE+
>>164
またまたレスdクスです

レスの通り、bmpの画像を使って、消す方法を探してみました。

Device->SetRenderState( D3DRS_TEXTUREFACTOR, dwAlpha );
Device->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
Device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
Device->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR );
Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
dwAlphaの上位1バイトを0で抜き、255で表示
そのままでも、α付き画像でも消えていってくれました。

私の使ってるSDKだと
D3DCOLOROP_MODULATEがなかったのでD3DTOPにしたけど問題ないですよね
それとも↑の方法で消す方法があったのでしょうか?
0166名前は開発中のものです。2005/10/14(金) 21:25:09ID:54HgW6Mn
>>165
TFACTORは最近のVGAは大丈夫なんだけど、一部で使えないから注意しろよ。
なんかMODULATEができない仕組みのがあるらしい。以前ハマった。

それからD3DTOP_MODULATEでした。
D3DCOLOROPなんてないです。すみません。
見ないで適当に書いたから嘘書いてもーた
01671612005/10/14(金) 23:11:42ID:Zlk2XPE+
>TFACTORは最近のVGAは大丈夫なんだけど、一部で使えないから注意しろよ。
>なんかMODULATEができない仕組みのがあるらしい。以前ハマった。

ウホッ 貴重な情報dクス! 家のノートでならなくてよかったーw
どのVGAだとサポートしてないかはdxinifoにあるのかな・・・。
っと、一応TFACTOR使わずに透明になる方法も考えておかねば。

いろいろありがとうとざいました。またよろしくっす or2
0168名前は開発中のものです。2005/10/16(日) 05:26:00ID:MZwJzEZB
吉里吉里+KAGでオーソドックスなADVを作ろうと思っています。
かまいたちの夜風の人物絵が欲しいのですが、
なるべく安価で簡単な作り方ってありますか?
0169名前は開発中のものです。2005/10/16(日) 05:42:13ID:V8Uq/Wel
釜井たちの夜で自前作成するとか。白バックとかでやれば綺麗に抜ける。
0170名前は開発中のものです。2005/10/16(日) 06:29:01ID:MZwJzEZB
>>169
やっぱり最後は釜井ですかね。
虫のいい話は無いか・・・。


今、輪郭線+グラデーションで描いてみたんですが、
当然「かまいたち」や「きみしね」の足元にも及ばず。
・・・しかし、こんなんでもごまかし効くかも? という不埒な考えが(w
0171名前は開発中のものです。2005/10/16(日) 08:00:22ID:5CEeghId
ゲーム仕様に関する質問です。

3体以上の敵キャラが出て、且つ相手をロックオンするタイプの3DアクションSTGを
作る場合、どういう仕様が最適だと思う?
0172名前は開発中のものです。2005/10/16(日) 08:53:37ID:OnRCNV+o
それだけでは私の方からは何とも。
01731712005/10/16(日) 10:54:25ID:5CEeghId
一言でいうと、連邦VSジオンのシステムで3ON3以上をさせるには?という事

ボタンで注視対象切り替え、、じゃ厳しいかな?と。
0174名前は開発中のものです。2005/10/16(日) 13:35:43ID:jvBKwnXC
どこの仕様を聞きたいのか分からない
0175名前は開発中のものです。2005/10/16(日) 13:55:28ID:3KJzBhPI
そのゲームやったことないけど、
たぶん、「常に一つの対象を」自動でロックするゲームが念頭にあるんでしょ

インターフェイスにマウスはありなの?
0176名前は開発中のものです。2005/10/16(日) 17:46:07ID:GmnSdA/S

みんなで参加できるオンラインのマージャンゲームを作りたいのですが
1日1時間の勉強で完成までどの程度かかるでしょうか?

CとJAVAとPERLはできるのですが、ゲーム作りをしたことは全くありません。
ゲーム作るのって、システム作るるよりもレベルが断然高いのですよね?
0177名前は開発中のものです。2005/10/16(日) 17:49:56ID:3GjD9sZY
>>176
オンライン麻雀の場合はシステム作るのとそんなに代わらないと思うよ
01781712005/10/17(月) 01:26:51ID:++n0jJf6
>>175
>たぶん、「常に一つの対象を」自動でロックするゲームが念頭にあるんでしょ

そうです。

>インターフェイスにマウスはありなの?

アリでも良いと思ってます。
0179名前は開発中のものです。2005/10/17(月) 07:58:07ID:cAcMlsae
どうもまだogg→wavの変換に悩んでる者です。
すいませんどなたかどこがおかしいのか教えてください。
ソースは以前と同じところで[3554.zip] コメントogg で上げました。
wavの場合は問題なく成功するのですがoggの場合はCreateSecondaryBuffer内の
CreateSoundBufferの部分でE_INVALIDARGのエラーがでます。
設定していない値はないし値も間違ってそうにないのですがどなたか助けて下さいお願いいたします。
0180名前は開発中のものです。2005/10/17(月) 08:36:43ID:6CLb/yQL
>>171
「アーマードコア」
0181名前は開発中のものです。2005/10/17(月) 10:19:02ID:tzORz5B+
>>179
DSBUFFERDESCとかで余計な機能を捨てろ。
とりあえずVOLUMEだけとかにしとけ。
3DAlgorithmとかも切っとけ

それでも駄目なら多分WaveFormatのほう
Oggファイルから正確にデータを取得しているかチェック
0182名前は開発中のものです。2005/10/17(月) 10:42:20ID:yaIZeSW0
>>179
DirectSound の 3D 能力を利用するアプリケーションでは、モノラル音源を提供しなければならない。DSBCAPS_CTRL3D フラグを指定してバッファを作成する場合、WAV フォーマットに複数のチャンネルが含まれていると、エラーになる。
0183名前は開発中のものです。2005/10/17(月) 13:37:40ID:ZU2S9++1
PAC.exeでテクスチャアニメーションをやりたいんですが
動的ポリゴンの設定方法がわかりません。
テクスチャ2枚使わなきゃアニメーションは出来ないですか??
誰か教えてください!
0184名前は開発中のものです。2005/10/17(月) 14:46:00ID:mC5XUtcL
一枚のテクスチャに複数のアニメーション内容を持たせて、
UVを切り替えて動かすことは可能。
UVを直接いじってもいいし、UVだけトランスフォームさせてもいいし、
頂点シェーダでパラメータを送って切り替えてもいい。
0185名前は開発中のものです。2005/10/17(月) 15:15:10ID:rlSi7aS0
テトリス作ってみたい・・・
0186名前は開発中のものです。2005/10/17(月) 15:16:58ID:ZU2S9++1
1枚でも出来るんですね。ありがとうございます!
いろいろやってみてるんですが
「動的ポリゴン設定」とか、「アニメーション設定」の
方法がわかりません…。フレームを設定しても
表情が切り替わるときに顔の部分だけポリゴンごと
消えちゃったりしてます。
どういう手順で設定すれば良いんでしょうか?
0187名前は開発中のものです。2005/10/17(月) 15:50:52ID:2Em1yKmN
>>185
そんなあなたに

つ[テンプレ嫁]
0188名前は開発中のものです。2005/10/17(月) 16:06:46ID:mC5XUtcL
>>186
まずはSDKのチュートリアルを終わらせる。
読むだけでなく実際に入力して動かすこと。
0189名前は開発中のものです。2005/10/17(月) 16:10:37ID:tzORz5B+
もしかして動的ポリゴン設定などというズバリな機能があると勘違いしてるんだろうか
0190名前は開発中のものです。2005/10/17(月) 17:20:33ID:CED678cw
>>185
ここはお前の日記帳じゃ(ry
0191名前は開発中のものです。2005/10/17(月) 22:56:31ID:FZPqpXpc
>>186
1回目は、テクスチャAのある領域を描画
2回目は、テクスチャAの別の領域を描画
3回目は、テクスチャAの更に別の領域を描画
4回目は、テクスチャAの更に更に別の領域を描画
5回目(ry

という考え方だからね。
がんばって実装するべし。
0192名前は開発中のものです。2005/10/18(火) 06:23:16ID:XTJtQDfe
>>178
マウスありならFPS形式がメジャーじゃないかな
ポインタの近くの敵を軽く自動ロック

似たようなこと少数でまったり語ってるんで良かったら
http://game10.2ch.net/test/read.cgi/gsaloon/1125751048/
0193名前は開発中のものです。2005/10/18(火) 19:55:57ID:eCrwHiys
ム板から誘導されてきました

ゲーム製作についての質問です

ゲームは始まったら当然スグゲーム開始ではなく
タイトル画面があったり設定画面があったりしますよね
これらはどうやって実装したらいいのでしょうか?
一応自分で思いついたのは以下の方法です

ゲームループ内で
switch(game_status)
case START_INIT:
  start.Init();
case START_FRAME:
  start.update();
  start.draw();
  break;
case GAME_INIT:
  game.Init();
case GAME_FRAME:
  game.update();
  game.draw();
  break;

といった感じです
何かもっとスマートな方法はありますでしょうか?
0194名前は開発中のものです。2005/10/18(火) 20:03:22ID:I/crJUgr
>>193
いいんじゃない?
自分でそれだけ考えられたのなら素晴らしいと思うよ。
ちなみにそういうのは仮想関数を使うと綺麗にいく
0195名前は開発中のものです。2005/10/18(火) 20:04:23ID:5qotF0T3
それでいいじゃん
0196名前は開発中のものです。2005/10/18(火) 20:14:50ID:I/crJUgr
設計の一例に過ぎないけど例えば

class Mode
{
public:
 virtual void ExeOneFrame() = 0;
};

class GameMode : public Mode
{
 int m_status;
public:
 virtual void ExeOneFrame();
};

そのswitch文は丸ごとg_mode->ExeOneFrame();とゆー感じに置き換えてしまって、
GameMode::ExeOneFrame()でm_statusの内容に応じてswitchする、という感じ

グローバルなgame_statusに各モードの推移状態を持たせるとだんだんややこしくなるので
各ローカルクラスでコードが完結するように心がけるとスッキリする。
TitleModeなりConfigModeなり適当に必要なモードを作ってg_modeを差し替えてモード変更。
デザパタで言うところのファサードとかストラテジーとかいうあたりになるのかな
0197名前は開発中のものです。2005/10/18(火) 20:41:23ID:eCrwHiys
ありがとうございます!

仮想関数は前に勉強しただけで実際に組み込んだコトないので
もういちど勉強しなおして>>196さんのを参考に組み込んでみようと思います
01981962005/10/18(火) 20:46:42ID:XL7lfMnp
ふっ、礼にはおよばないぜ
0199名前は開発中のものです。2005/10/18(火) 21:13:27ID:3ahWTE6v
次はモード切り替え時の前処理で悩みに来るだろうな。
0200名前は開発中のものです。2005/10/18(火) 21:24:37ID:/jccHSsI
>>199
先に書いとくか、、。
1.Modeクラスに前処理、後処理用のメソッド追加(OnEnter,OnExet)
2.シーン管理クラス作って置いて、シーンの変更がある度に先ほど作ったメソッドをコール

管理クラスに1つ前のシーン名を記憶させとくと便利だと思うよ。
(切り替え等の為に名前で管理する)
0201名前は開発中のものです。2005/10/19(水) 02:50:48ID:SNni5lY5
ちょっと聞いてくれー。
今3Dモデルを使った2Dシューティングを作ってるんだけど、
自機の行動範囲を制限するために、スクリーン座標を取得したいんだ。

float hsw = (float)vp.Width/2, hsh = (float)vp.Height/2;   // vpはビューポート
matScreen = _D3DXMATRIXA16(
       hsw,    0,   0,   0,
       0,   -hsh,   0,   0,
       0,     0,   1,   0,
       hsw,  hsh,   0,   1);

matWorld = matWorld * matView * matProj * matScreen;

という風にやってるんだけど、なんかぜんぜん違う値が出てしまう……。(X座標が50000とか)
スクリーン座標を取得するときの変換行列はこれで合ってる?
0202名前は開発中のものです。2005/10/19(水) 03:58:01ID:/rxeAJ9N
>>193
コルーチンやマイクロスレッドを使う
0203名前は開発中のものです。2005/10/19(水) 04:29:23ID:LGVIiHwb
>>201
>これで合ってる?
 
その説明じゃ普通分からねーよ。matProjの説明が要るだろ。つまり
 
vector(0,0,0,1) * matWorld * matView * matProj = 謎(x,y,z,w)
 
この謎ベクトルに何が入ってるのか分かんなきゃ
謎(x,y,z,w) * matScreen の結果が何なのか分からん。
0204名前は開発中のものです。2005/10/19(水) 04:32:40ID:XFexkAHV
>>201
行列自体は合ってるかと。
自機の行動範囲ってスクリーン座標からワールド座標に変換するんだよね?
それだと、それの逆行列を使うんだけど、それは大丈夫?
0205名前は開発中のものです。2005/10/19(水) 04:34:52ID:XFexkAHV
>>203
射影変換行列であろうことくらい察してやろうよw
0206名前は開発中のものです。2005/10/19(水) 04:46:47ID:Pmf5eBjN
>>196
>>193ではないのですが全く同じことをしているのでちょっと質問させて下さい。
Win32APIプログラミングで>>196の様な用途のクラスを使う場合
クラスのインスタンスはどこで作成するのが一般的なのでしょう?
グローバル領域ですか?
それとも値を保持したい変数をstaticにしてウィンドウプロシージャの中で作成ですか?
C++始めたばかりでまだクラスの扱い方がよくわからず変な事言っちゃってるかもしれませんorz
0207名前は開発中のものです。2005/10/19(水) 04:51:41ID:LGVIiHwb
射影変換行列の定義は一意ではないということを
指摘していることくらい察しろよ。
 
DirectXの場合D3DXで作った射影変換行列なら
matScreenの役割はDirectXのビューポートに相当するものと
想像できる。matScreenが合ってるかどうかを手っ取り早く調べるには
processVerticesの計算結果と比較すればよいだろ。多分結果は違うと思う。
02082012005/10/19(水) 05:07:48ID:SNni5lY5
とりあえずスクリーン変換の行列は合ってるんですか……。んー、どこが悪いのか。
しかし、さっきマニュアル見ててD3DXVec3Project()関数の存在を知りました。
今は時間的に厳しい状況なのでとりあえずは、こっちで実装しときます。返答ありがとうございました。
>>207
後で見てみます。
0209名前は開発中のものです。2005/10/19(水) 05:29:29ID:8WPqoQfN
DirectXのヘルプを読んだ。固定機能パイプラインの解説に
射影変換行列とかビューポートの計算式が載ってたぞ。
そのまんま使ったらちゃんと固定機能パイプラインの計算結果と一致した。
以上報告終わり。
0210名前は開発中のものです。2005/10/19(水) 07:18:53ID:ct4u9Uqh
>>196
参考にさせていただいてるのですが
ちょっとわからないコトがあります

>そのswitch文は丸ごとg_mode->ExeOneFrame();とゆー感じに置き換えてしまって、
>GameMode::ExeOneFrame()でm_statusの内容に応じてswitchする、という感じ

例えばタイトル・コンフィング・ゲームの3つのモードを作りたい場合
Mode → GameMode → TitleMode
               |
               →ConfigMode
といったように派生するというコトでしょうか?
g_modeを差し替える方法がよくわからないので
ヒントだけでもいただけると助かります
0211名前は開発中のものです。2005/10/19(水) 08:23:27ID:ejWxLDlZ
どうもまだOGG形式に悩んでる物です。
プライマリバッファのフラグの設定に3Dやボリュームなどの設定をしていなければ
セカンダリで3Dとかボリュームとかを指定してなければできませんか?3D・ボリューム
・周波数をOGGで再現するのは無理ですかね?
■ このスレッドは過去ログ倉庫に格納されています