ゲームプログラミング相談室【Part6】
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
04/03/06 01:25ID:d2e/eEyg扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
■過去スレ
【Part2】http://pc.2ch.net/tech/kako/985/985540361.html
【Part3】http://pc.2ch.net/tech/kako/1002/10028/1002894129.html
【Part4】http://game.2ch.net/gamedev/kako/1005/10050/1005040025.html
【Part5】http://pc2.2ch.net/test/read.cgi/gamedev/1036410116/
■関連スレなど
>>2-5
0616名前は開発中のものです。
2006/01/14(土) 15:52:59ID:IKOpDFffコア部だけなら100k切るし。
0617名前は開発中のものです。
2006/01/14(土) 16:24:39ID:9Bbt7+hj0618名前は開発中のものです。
2006/01/14(土) 18:07:00ID:p1M3DQqdDLL化すらする必用もなくプログラムに組み込める。
ソースのリンクまで張ってあるのに、なんでその程度のことすら確認しないんだろう。
0619名前は開発中のものです。
2006/01/14(土) 19:32:16ID:XGcvBkdjPHPを使うってのは聞いたことないな
0620名前は開発中のものです。
2006/01/14(土) 19:43:15ID:j0Ue+PIMサウンドは、MIDINのストリーム再生とかやってるわけ?
0621名前は開発中のものです。
2006/01/14(土) 20:40:32ID:ENjm6BLuえー、本当に?
PHP側のソース変更なしで出来るなら、もっと使われてると思うけどなぁ。
0622名前は開発中のものです。
2006/01/14(土) 21:57:58ID:zrpnKi1a0623名前は開発中のものです。
2006/01/17(火) 17:27:10ID:5EkVe52dこの本ってどうかな。
というかまだ出てないんだけど。
買うか激しく迷ってる。
0624名前は開発中のものです。
2006/01/17(火) 18:34:07ID:OAcYDX6e頼んだぞ!
0625名前は開発中のものです。
2006/01/17(火) 21:01:42ID:MfScR0E60626名前は開発中のものです。
2006/01/17(火) 21:43:04ID:YlbHfDfM考えてるんだけど、馬の速さのバランスを考えるのが難しい・・。
ちょっと速い馬を作ろうと考えたらえらく速くなったり、逆をすると
えらく遅くなったり・・。
なんかコツって無いかな?
競馬ゲーム作った事ある人いない?
0627名前は開発中のものです。
2006/01/17(火) 21:51:41ID:a7PR7pCq前半でスタミナを温存した馬は、ラストスパートでダッシュできるようにすればいい。
0628名前は開発中のものです。
2006/01/17(火) 21:54:11ID:PElCyB9t個々の馬を勝手に走らせるんじゃなくて、全体を見る視点を入れてみたらどう?
たとえば、混戦を演出したいんだったら、重みをつけてみるとか。
馬群の平均位置より後ろにいる馬には、根性補正をかけて足を早くする。
逆に平均位置よりも前にいる馬には、油断補正をかけて足を遅くする。
0629626
2006/01/17(火) 22:13:17ID:YlbHfDfM>>627,628
ちなみに一応
力、
スタミナ、
スピード
調子
のパラメタを持たせてる。
あと追いか逃げで二つのタイプを作ってる。
そんで、力が強い方が馬同士がぶつかった時に相手からスタミナを奪え
るようにして、調子がいい方が持ってる最高スピードで走れるようにしてる。
スタミナが無くなると遅くして、あまってたらラストスパートができるように
してる。
まぁ結局いろいろパラメタを作ったんでそれらを上手く調整できなくなっ
ちゃってるのよね・・。
でも628が出してくれた案はなるほどーって感じ。
ちょっと実装してみます!
0630名前は開発中のものです。
2006/01/19(木) 12:30:42ID:abptcwuQそこでこんな書籍が参考になる等アドバイスを頂けたらありがたいのですが
よろしくご教授のほどお願いします
0631名前は開発中のものです。
2006/01/19(木) 12:37:44ID:FNLWz9b/0632名前は開発中のものです。
2006/01/19(木) 12:43:06ID:abptcwuQわかりました自分で調べます
0633名前は開発中のものです。
2006/01/20(金) 03:49:36ID:AJrpxY2i3Dゲームを作るには、OpenGLやDirectXといったAPIの知識の他に、
数学 (3次元の幾何) も必要になる。
お前さんの数学レベルにもよるが、得意でないならこの本は読んでおくといい。
(中学レベルから高校レベルまで、必要な部分だけを効率的に書いてある)
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797329076/249-0216458-7341971
読み終えたら、同じシリーズのこれかな。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797331976/ref=pd_bxgy_text_2/249-0216458-7341971
このシリーズは初心者が挫折しかねない内容をあえて省き、
逆に初心者は知らない怖れがある内容は簡単なことでも解説する、
というスタンスで書かれていると思った。
いきなり網羅的な本を読むと途中で挫折する怖れがあるから、
この2冊を読んで動くものを作ってみて、
物足りなくなってきたらもっと詳しい本を読めばいいと思う。
0634名前は開発中のものです。
2006/01/20(金) 04:01:10ID:AJrpxY2i確かに技術は向上するが、近道ではないと思う。
探す時間を読むのに割り当てたほうが効率的。
(自分で解決しないのが癖になったら問題だが)
0635名前は開発中のものです。
2006/01/20(金) 05:04:24ID:cuy72tDdDirectPlayでピアツーピアアプリを開発しようとしていたのですが、WEBで検索していて、
以下のように変化してきています。
1.ピアツーピアは NAT 越えできないから、費用かかってもクラサバでやるべきだろう。
2.DirectPlay は推奨されていない(MS自身を含めて)から Socket でやるべきだろう。
で、今はサーバーを NAT の外に置き、クライアントはどこでも可、通信は Socket で行う。
という環境を想定しています。
そこで以下の疑問が発生して悩んでいます。
1.部分的に UDP を使いたいのですが、UDP もやはり NAT 越え出来ないのでしょうか?
今回の環境でいうと クライアントからの送信は UDP で行えるが、サーバーからクライアント
への送信に UDP は使えないのでしょうか?
2.速さを要求する部分には UDP を使うべきでしょうか?TCP-IP と UDP ではかなり差があるもの
なのでしょうか?
どうかよろしくご教授下さい。
0636名前は開発中のものです。
2006/01/20(金) 05:54:22ID:ts2pcmWN本代を惜しむな。
0637名前は開発中のものです。
2006/01/20(金) 08:22:06ID:2iTzpS+yまずNATとIPマスカレードを混同するのをやめること。
それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
0638名前は開発中のものです。
2006/01/20(金) 08:28:59ID:xWSHaoVX0639名前は開発中のものです。
2006/01/20(金) 10:45:30ID:cuy72tDd>>IPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
えーと、DNSサーバーへの問い合わせにはUDPが使われているのでしたよね?
>>NATとIPマスカレードを混同するのをやめること。
ちょっと勉強し直してきます。
0640名前は開発中のものです。
2006/01/20(金) 13:09:31ID:cuy72tDd板違いなような気がする初歩的な疑問がわいてきたのですが、どうかお教え下さい。
NATと静的IPマスカレードは以前ルーターに設定した事があり、外側からアクセスできる事
も確認していました。でも普通のIPマスカレードに関しては特に設定した事がなく、きっと設定
が難しいのだろうと関わらないようにしていました。
ところが今勉強してきた内容によると、特にルータへの設定はいらないと思ったのですが、こ
れは正しいのでしょうか?
最近のルーターは特に設定しない限り(グローバルIP設定等の設定以外)IPマスカレードが
基本なのでしょうか?
0641名前は開発中のものです。
2006/01/20(金) 13:40:27ID:cuy72tDd>まずNATとIPマスカレードを混同するのをやめること。
外側からアクセスできないのはIPマスカレード(動的)の場合のみという事で正しいでしょうか?
>それからIPマスカレードでUDPが使えなかったら、ドメインを引くことすら出来なくなるぞ。
UDP も IP も扱いは同じと言う事でしょうか?
となるとやはり、IPマスカレードの場合、ゲートウェイ内部から外側へのアクセスはできるが、外側から
内側へのアクセスはできないという事になるのですか?UDP、IPに関わらず。
あ、またちょっと勉強してきます。
0642名前は開発中のものです。
2006/01/20(金) 16:06:33ID:f4A/Q0C3WM_PAINTが呼ばれたときのみ描画するという方法以外に何かないでしょうか。
ありましたらご教授願います。
0643名前は開発中のものです。
2006/01/20(金) 18:36:33ID:kMfWH2Ff徹底的に軽量化しる。あとWM_PAINTを使うのはなんか間違ってる希ガス
0644名前は開発中のものです。
2006/01/20(金) 21:52:48ID:lXuWX4xzFPSちゃんと考えてる?
0646642
2006/01/20(金) 22:13:41ID:1+fLDQsB返答ありがとうございます。
>>643
十分軽くしてるつもりなんですが・・・。
>>644
考えてません。タスクシステムを使えということでしょうか。
0647名前は開発中のものです。
2006/01/21(土) 04:36:25ID:mg8wRruj0648名前は開発中のものです。
2006/01/21(土) 10:52:47ID:FcJBx5+Jまずは部分毎に時間を測って
どの処理に時間が掛かっているのか特定しよう。
0649名前は開発中のものです。
2006/01/21(土) 11:12:25ID:E5l3VzaB0650642
2006/01/21(土) 11:39:57ID:7OciQh2jif(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(msg.message == WM_QUIT)
break;
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else {
Paint(); // 描画処理です
}
Sleep(1);
}
0652名前は開発中のものです。
2006/01/21(土) 11:57:20ID:cOBg8t3k0653名前は開発中のものです。
2006/01/21(土) 11:59:39ID:7OciQh2j返答ありがとうございます。さっそくやってみます。
0654名前は開発中のものです。
2006/01/21(土) 12:17:55ID:E5l3VzaB0655名前は開発中のものです。
2006/01/21(土) 12:24:15ID:gndLCiDdうちはこんな感じ。スレッドなんかいらんw
INTRun()
{
MSG msg;
msg.message = WM_NULL;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while (WM_QUIT != msg.message)
{
if (PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE))
{
if (GetMessage(&msg, NULL, 0U, 0U))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
//ゲームの処理へ
}
}
return (INT)msg.wParam;
}
0656名前は開発中のものです。
2006/01/21(土) 12:41:58ID:nqZd1DMC0657名前は開発中のものです。
2006/01/21(土) 12:41:58ID:FcJBx5+JPaint(); をコメントアウトした場合と
掛かる時間を比較しよう。
劇的に速度が違うなら Paint() の中に問題があるんじゃないのかな。
0658名前は開発中のものです。
2006/01/21(土) 12:58:21ID:gndLCiDdそうなん?どこが駄目か教えて。
ちなみに少し前のDirectXSDKサンプルのまんまです。
0659642
2006/01/21(土) 13:08:25ID:7OciQh2jみなさんありがとうございます。
>>655
うらやましい
>>657
大きな違いはありませんでした。
DirectXを使わなければ問題は起こらないので、初期化の地点で問題があるのかもしれません。
もう少し見直してみます。
0660642
2006/01/21(土) 13:54:29ID:7OciQh2jD3DCREATE_MIXED_VERTEXPROCESSING を
D3DCREATE_SOFTWARE_VERTEXPROCESSING に代えるだけでした。
まさか初期化にミスがあるとは思わなかったもので・・・。
アドバイスを下さった皆さん本当にありがとうございました。
0661名前は開発中のものです。
2006/01/21(土) 14:07:21ID:/mV6xXb2ここのサンプルを実行してみたのですが
画面消去の命令があるにもかかわらず、
画面が更新されないで指定画像が重なって表示されてしまいます。
ClsDrawScreen() ;だけが効いていないようなのですが、何が問題なのでしょうか。
ClsDrawScreen() ;をコメントアウトしてもしなくても同じ結果になります。
0662名前は開発中のものです。
2006/01/21(土) 15:26:20ID:+T+cr/VJSleepしないとCPUの処理時間を占有するからじゃないかなぁ…。
急いで書いたから汚いけど、スレッド分けるとセオリー的にはこんな感じかな?
DWORD WINAPI gMainLoop(LPVOID lpDone){//ゲームのメインループ
bool* pDone = dynamic_cast<bool *> (lpDone);
while(!(*pDone));//ここでループ
ExitThread(0L);
}
class CGameMain{/ゲームクラス
public:
CGameMain():done(false){CreateThread(NULL, 0, gMainLoop, &done, 0, NULL);}
~CGameMain(){done = true;WaitForSingleObject(hThread, INFINITE);}//スレッド終了
bool CGameMain::IsDone(void){return done;}
void CGameMain::Kill(void){done=true;}
private:
bool done;
HANDLE hThread;
};
// WinMain側の処理
MSG msg;
CgameMain *pGMain = new CgameMain();
do{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);DispatchMessage(&msg);
}else{
if (pGMain->IsDone()) DestroyWindow(g_hWindow);
}
} while (msg.message != WM_QUIT);
delete pGMain;
0665名前は開発中のものです。
2006/01/21(土) 16:56:03ID:gndLCiDdスレッドの話をすると荒れるのでやめとこうw
0666名前は開発中のものです。
2006/01/21(土) 17:14:45ID:VeQ0DG52DirectXのサンプル自体はあくまでサンプルであって、
あくまでDirectXの機能を紹介するために作られただけであのままでは実用出来ない。
理由はサンプルのままだとFlip時にV-Sync相当のウエイトを入れているので、
フレームスキップや、動作が重くなった場合に描画以外の処理だけ先に進めることが出来なくなる。
逆にウエイトを外すと無限にぐるぐるまわすことになり、
ベンチマーク用に能力を測るのなら適切だけど、実際のプログラムとしては不適切。
またループの内側でSleepをすると、その間ウインドウメッセージが処理できなくなる。
だからDirectXの機能紹介と能力測定のサンプルとしては適切なソースでも、
実際のプログラムには不適切な書き方なんだよ。
0667名前は開発中のものです。
2006/01/21(土) 18:00:17ID:gndLCiDdメッセージ処理のことなら上の3つは同じことだと思うが違うかな。
スレッドのことなら荒れるので(ry
0668名前は開発中のものです。
2006/01/21(土) 18:09:01ID:cOBg8t3kさらに間違ったままそれを広めようとする奴とか。
0669名前は開発中のものです。
2006/01/21(土) 18:11:30ID:gndLCiDd0670名前は開発中のものです。
2006/01/21(土) 19:30:15ID:ZH97Dxy8for( ; ; ) {
MSG msgmouse;
msgmouse.message = WM_NULL;
while(PeekMessage(&msgmouse, NULL, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE)) Sleep(0);
if(msgmouse.message == WM_MOUSEMOVE) DispatchMessage(&msgmouse);
MSG msg;
while(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE )) DispatchMessage(&msg);
if(fpstimer.PeekElapsedTime() > MIN_ELAPSED_TIME_FOR_FRAME)
{
fpstimer.Reset();
HRESULT hr;
if( FAILED( hr = Render3DEnvironment() ) ) { break; }
if(hr == S_OK) m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
if(msg.message != WM_CHAR && msg.message != WM_KEYDOWN && msgmouse.message == WM_NULL &&
fpstimer.PeekElapsedTime() + 0.002 < MIN_ELAPSED_TIME_FOR_FRAME)
MsgWaitForMultipleObjects(0,NULL,FALSE,2,QS_ALLEVENTS); // sleep until messages come
else
Sleep(0);
}
}
0671名前は開発中のものです。
2006/01/21(土) 21:35:41ID:bEVxbAiqそしてしったかしたいだけのオマエとかな
0672661
2006/01/22(日) 06:34:40ID:4Vf7TlrBそちらでお伺いさせていただくことにしました。
スレ汚しすいません。
0673名前は開発中のものです。
2006/01/23(月) 14:58:01ID:yyObefN6閉じられたハンドルにはまた新しいデータが割り当てられますよね。
これって閉じたハンドルを閉じられたとは知らずに保持していて
ハンドルを参照した時に別のデータを取得してしまう危険性は無いでしょうか?
マジックナンバーがラップして同じインデクスに同じマジックナンバーが
割り当てわれる可能性は十分にあると思うのですがどうなんでしょう?
1. AがHというハンドルを持っていたとします。
2. AはBにHを分け与えました。
3. BはHを破棄したくなりその場で破棄(mgr.Release(H))しました。
4. AはHを参照するも無効なハンドルだと知ることが出来ました。
ここまではいいんですよ。生ポインタじゃこのシナリオは書けません。
上の3.と4.の間で大量のハンドルの生成が行われた場合、
4.でAが(閉じているはずの)Hを参照した時にHと同じインデクス/マジックナンバーの
ハンドルの再割り当てが行われるとAは別のデータを参照してしまいます。
0674名前は開発中のものです。
2006/01/23(月) 15:33:46ID:EPKLYP2Eマジックナンバーの値は増加する一方だから
基本的に同じマジックナンバーは割り当てられない。
ただしマジックナンバーを保持する変数には当然上限があるから
ハンドルの生成数にも限りがある。
と俺は思う。
0675673
2006/01/23(月) 15:55:07ID:yyObefN6ハンドル生成数はインデクスの方ですよね?
マジックナンバーは正当性を保証するだけのもので。
ハンドル数に関係なくハンドルの生成/破棄を繰り返せばそれだけでマジックナンバーは増加します。
マジックナンバーはインデクスとは比べ物にならない位インクリメントされるので
意外とすぐ上限に達してしまうような。
0676名前は開発中のものです。
2006/01/23(月) 16:00:23ID:EPKLYP2E違うんじゃない?
インデックスの方はマジックナンバーがあるお陰でループしても平気だけど
マジックナンバーの方はそうは行かない。
0677673
2006/01/23(月) 16:24:21ID:yyObefN6それだとハンドル数が例え1個でも生成/破棄の回数が決まってしまいますよね?
インデクスは破棄されたハンドルのものを再利用するのでインデクスに16bit割り振れば
65536個持てるわけですよね。
なんだか本題より前の段階で意見の相違があるみたいですね。
実装はgemsの1.6項のものです。
0678名前は開発中のものです。
2006/01/23(月) 16:27:52ID:EPKLYP2Eハンドルをコピーするだけではマジックナンバーは増えないのでは?
0679673
2006/01/23(月) 16:32:22ID:yyObefN6ええ、確かにハンドルのコピーだけではマジックナンバーは増えません。
ですがマネージャにハンドルを要求すればその分マジックナンバーは増えますよね?
ゲームを動かしていて2時間くらいしたら
「マジックナンバーが一杯なので終了します」じゃ話にならないですよね・・・?
gemsのP73 でもマジックナンバーのラップ処理は記述されてるので、
マジックナンバーはラップ前提なはずですよ。
0680名前は開発中のものです。
2006/01/23(月) 16:53:58ID:EPKLYP2Eそうでしたか。今手元にGems無いんで家に帰ったら確認してみます。
>マネージャにハンドルを要求すればその分マジックナンバーは増えますよね?
>ゲームを動かしていて2時間くらいしたら
>「マジックナンバーが一杯なので終了します」じゃ話にならないですよね・・・?
だから種類ごとにハンドルマネージャ作れるようにテンプレートにしてあるのでは。
無限にというのはいくらなんでも無理だからその中で想定最大数を見積もって
バランスよく分けて管理すると。
0681673
2006/01/23(月) 17:19:16ID:yyObefN6>だから種類ごとにハンドルマネージャ作れるようにテンプレートにしてあるのでは。
と言う事はマジックナンバーがラップして同じインデクスに
同じマジックナンバーが割り当てられてしまうのは仕様って事ですかね。
>無限にというのはいくらなんでも無理だからその中で想定最大数を見積もって
ですね。
ですがgemsでは「インデクスの範囲内でユニークを保証する」といった意味で書かれていると解釈したため
ゲームオブジェクトのようなものにハンドルを割り当てようと思ったわけです。
ですがテクスチャやサウンドなどのリソースに割り当てるなら問題ないってレベルなんでしょうね。
0682名前は開発中のものです。
2006/01/23(月) 17:30:41ID:EPKLYP2E同インデックス、同マジックナンバーってのはそうそうでないのではないかな
Gemsでも8-24とかになってたような 気のせいだったかな?
記憶があやふやでスマソ。
0683673
2006/01/23(月) 17:56:28ID:yyObefN6>16bit-16bit みたいにインデックスとマジックナンバーで半々にしなけりゃ
>同インデックス、同マジックナンバーってのはそうそうでないのではないかな
でも確立的に低いからといってゲームオブジェクトなどの場合
オブジェクトの摩り替わりは絶対にあってはならない事ですよね。
しかも一番見つけにくい部類のハグになりそうですし。
>Gemsでも8-24とかになってたような 気のせいだったかな?
たしか半々だったような。テクスチャリソースの管理ならどんな割合でも問題なさそうですけど。
マジックナンバーを本物のGUIDにしたらどんくらい遅くなるんだろうか。
他に早くて確実なユニークIDって何かないかなぁ。
0684名前は開発中のものです。
2006/01/24(火) 01:14:06ID:tH1FX6650685名前は開発中のものです。
2006/01/24(火) 01:23:48ID:TYtG+MJgどういうこと?
void* p = malloc(1);
free(p);
void* q = malloc(1);
assert(p != q);
こうは言えないだろ。
0686名前は開発中のものです。
2006/01/24(火) 02:27:10ID:tH1FX665開放済みのアドレス参照するようなアホはハングアップでもなんでもすればいいんじゃね?
0687673
2006/01/24(火) 04:33:44ID:YZe4vdms685氏はアドレスじゃdangling pointerは防げないよって意味でmallocの例を出したんじゃないんですか?
pを他のやつにばらまいて誰かがpを開放したらpの有効性を誰が保証してくれるんでしょう。
上記のハンドルだと再割り当ての可能性があるし、
スマートポインタじゃオーバースペックだから他にユニーク性を保証するものってないだろうかっていう話ですよ。
でももう面倒だから参照カウンタで管理します。
0688名前は開発中のものです。
2006/01/24(火) 05:27:10ID:0JfXcgLd一ヶ月プレイし続けたところでラップさせられない。
16bitやそこらでも、
16bit値をラップさせるほどオブジェクトが生成されるほどの時間、
ハンドルを寝かせるようなアルゴリズムにしなければいい。
0689673
2006/01/24(火) 05:46:51ID:YZe4vdms>32bitもあれば、1秒間に1000個生成しても、
>一ヶ月プレイし続けたところでラップさせられない。
1秒間に1000個って60FPSのゲームで1フレ約16個ですよね。
局所的に見ればそれ以上生成される可能性は十分にありますよ。
でもまあIPv6でIPが2^128個以上存在する可能性は
将来的に十分ありえるから心配って言ってるようなもんですかね。
>bit値をラップさせるほどオブジェクトが生成されるほどの時間、
>ハンドルを寝かせるようなアルゴリズムにしなければいい。
確かにこれを厳守すれば確立的に問題ないでしょうが、
人間はミスする生き物です。
他人がどうコーディングするかは他人まかせなので・・・。
実際みなさんはゲームオブジェクト(のポインタ)をどのようにして管理してます?
0690名前は開発中のものです。
2006/01/24(火) 06:30:02ID:mDNWO7360691名前は開発中のものです。
2006/01/24(火) 15:11:47ID:OImDqu0Sなぜかミスしてなくても止まったり動かなかったりしますorz
いろいろなところで、オブジェクト指向のためのプログラミング理論が
展開されてるなあw
0692名前は開発中のものです。
2006/01/24(火) 17:03:38ID:/21JgKVE32bit型整数でマジックナンバーを表し、
ゲームが60fpsで1fpsごとに100オブジェクト生成することを考えます。
マジックナンバーがオーバーフローするまでには
2^32 / (100個 * 60fps * 60sec * 60min * 24hour) = 8.28日
かかりますので、仕様として「ゲームは連続一週間以上動かさないで下さい。」とするか、
これで満足できない場合は32bit型整数を2つ使いましょう。
ちなみに、この場合(ry
0693名前は開発中のものです。
2006/01/25(水) 01:23:31ID:NTRzHP+40694名前は開発中のものです。
2006/01/25(水) 01:49:38ID:BOmLnX9tひたすら条件分岐しまくりだったらやっぱりみっともないの?
0695名前は開発中のものです。
2006/01/25(水) 01:55:15ID:5sRU4y71swith-case文が何十何百と、滝のように流れていたな。
アドバイス欲しいなら言語かいた方が良いかもよ。どのみち関数は出来ないとだけど。
0696名前は開発中のものです。
2006/01/25(水) 10:01:28ID:gmXOMyeO関数ポインタで切り替えする手もあるな。
どの状態のときに何をするのか、ちゃんと管理出来るのであれば条件分岐しまくりでも構わないよ。
みっともなかろうが作りやすい手段を取ればいい。
0697名前は開発中のものです。
2006/01/25(水) 10:03:07ID:tn59aU260698名前は開発中のものです。
2006/01/25(水) 13:58:23ID:BOmLnX9t本屋でゲームAIの本を立ち読みしたら、ファジー理論とかって奴が書いてあったからさ。
理屈は分かったんだけど、関数が自分の理解の範疇を超えてたから、
ちょっと不安になった。
やっぱり、条件分岐連発より関数使った方が処理は早いのかな?
だったら関数で出来るかぎりやってみたいんだけど。
それとも、初めて組むプログラムでそこまでやるのは無謀?
0699名前は開発中のものです。
2006/01/25(水) 14:30:31ID:7MagqtIT条件分岐と関数では、処理速度に大きな違いはない
ただソースコードの読みやすさとか修正のしやすさに大きな違いが出る
基本は関数単位で作るものだと思った方がいい
もちろん>>696案のほうが有効な状況もあるけど
0700名前は開発中のものです。
2006/01/25(水) 14:30:38ID:vp/xDrq70701名前は開発中のものです。
2006/01/25(水) 22:02:47ID:/k0hXHel一般アプリのプログラマでもOS屋でもない。
作った者が勝ちだ。
動かした者が勝ちだ。
条件分岐のカルボナーラでいいじゃないか。
ずっと書き続けていれば、いつか自然に条件分岐を捨てる日が来るのさ。
0702名前は開発中のものです。
2006/01/25(水) 22:09:14ID:LjkjN1ec後で書き直したってせいぜい3日だよ。
それなのに始める前に何日悩むのかw
0703名前は開発中のものです。
2006/01/25(水) 22:42:06ID:5CRuCrfQ0704名前は開発中のものです。
2006/01/26(木) 01:35:32ID:p9JhM1p4糞コードの量産を正当化するような発言は控えてください。
0705名前は開発中のものです。
2006/01/26(木) 02:38:40ID:Id3aznFoどうせ晒さないからおk
0706名前は開発中のものです。
2006/01/26(木) 02:59:37ID:p9JhM1p4{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;;
ヾ;;;ハ ノ .::!lリ;;r゙
`Z;i 〈.,_..,. ノ;;;;;;;;>
,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f そんなふうに考えていた時期が
~''戈ヽ `二´ r'´:::. `! 俺にもありました
0707673
2006/01/26(木) 15:37:38ID:eu4m8wWi>32bit型整数でマジックナンバーを表し、
確かにマジックナンバーに多量のbitを割り当てれば問題ないのはわかってるんですが、
ハンドルを32bit(約レジスタサイズ)に収めたいジレンマがあったのでそもそもこんな質問をしたわけです。
しかもその32bitをインデクスと共有するため実用上は最大で20bitほどしか割り当てられません。
単一のインデクスが毎回使いまわされるという最悪なアルゴリズムでは
20bitを消費した直後にハンドルに同じマジックナンバーが割り当てられてしまいます。
均等に12bitのインデクスが使われる確立も低いため、間をとってインデクスの約6bitが平均して使われると仮定すると
26bitですので約3時間で再割り当てが行われる可能性があります。
まぁ32bitにこだわらなくても最近のPCなら(ry
0708673
2006/01/26(木) 15:47:34ID:eu4m8wWi8bitで12時間ですか。ゲーマーはご遠慮くださいってとこで・・・。
0709名前は開発中のものです。
2006/01/26(木) 17:54:38ID:yrvBeKCI画面表示用の配列を作って、1ブロック分移動するたびにマップデータ配列から新しいブロック列を読み込む
ってのを使ってるんだけどどうも重くて
0710名前は開発中のものです。
2006/01/26(木) 18:06:36ID:MnDriWAX0711名前は開発中のものです。
2006/01/26(木) 19:19:29ID:yrvBeKCI0712名前は開発中のものです。
2006/01/26(木) 19:21:36ID:yrvBeKCIそろそろパソコン購入を考えた方がよさそう
0713名前は開発中のものです。
2006/01/26(木) 20:53:11ID:R2/Ifoi10714名前は開発中のものです。
2006/01/26(木) 21:07:57ID:yrvBeKCIマップとか当たり判定の仕方を解説してるサイトとか無いかな
0715名前は開発中のものです。
2006/01/26(木) 22:57:30ID:R2/Ifoi1マップのサイズってどんなもんよ。 メインメモリをはるかにオーバーしてるんじゃなければ
そうそう重たくならないと思うんだが。
スーパーマリオなんて8bitマシンの4Mhzで普通に動いてたろ。
■ このスレッドは過去ログ倉庫に格納されています