ゲームプログラムなら俺に聞け
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/01/02(金) 19:01:16なんでも聞いてちょ
0002デフォルトの名無しさん
2009/01/02(金) 19:26:370003デフォルトの名無しさん
2009/01/02(金) 19:31:34ターゲットOSは、Windowsですか。
移植性の考慮としてどのようなことを心がけていますか。
どのような開発環境を使っていますか。(e.g. OS/IDE : Windows XP 32bit/VC++6.0 || Linux i386/GCC&vi&make )
0004デフォルトの名無しさん
2009/01/02(金) 19:43:09スクリプト言語の限界を感じています。
なのでC++で作成しようかと考えているのですが、多少のアクションを含む動作がある
ゲームの開発にはどんな開発言語が適しているでしょうか?
0005デフォルトの名無しさん
2009/01/02(金) 19:43:23http://pc11.2ch.net/gamedev/
0006デフォルトの名無しさん
2009/01/03(土) 00:25:52言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0007アイ
2009/01/03(土) 16:41:500008ワカメ
2009/01/09(金) 21:21:23キャラ移動となると、当然1ドットだと遅いが動きが綺麗だがこのままだとゲーム
にならない。5ドットだと動きが早いが何かきにくわない。2ドットぐらいが、中立かな。
他に良い方法がありませんか?
0009デフォルトの名無しさん
2009/01/09(金) 22:38:000010デフォルトの名無しさん
2009/01/10(土) 00:25:56それ未満はゴミ。
0011デフォルトの名無しさん
2009/01/10(土) 00:33:09タイトル時は0か、文字とかが点滅するタイミング分でいい。
スクロール時は、更新する回数を少なく、
領域を小さく出来るように工夫する。
0012デフォルトの名無しさん
2009/01/10(土) 01:16:39キャラクタの座標を浮動小数か固定小数で持てばいい
表示する時にだけ端数を切り捨てる
0013デフォルトの名無しさん
2009/01/10(土) 01:18:35固定小数オススメ。
0014デフォルトの名無しさん
2009/01/10(土) 08:51:01ハードウェアで計算できる物を、ソフトウェアで処理したらノロイ
0015デフォルトの名無しさん
2009/01/10(土) 12:04:31どういう環境の場合について言ってるんだ?
PCなら浮動がいいだろうけど他のプラットフォームではわかんね
0016ワカメ
2009/01/10(土) 23:52:57して、まずい部分はWAIT掛けていた。50,60FPSで作ると
かって、ゲーム製作ページでうるさいくらい、言っているからFPSを上げる
のまずいのかなと思ってしまう。。。けど、結局そのソースコードのサンプルが
どこにも載ってないし、あっても鈍足。 9、11さんみたく、がベストなのかな〜?
ちなみにDirectX 8.0ですので、座標は浮動小数使ってます。
0017デフォルトの名無しさん
2009/01/10(土) 23:55:350018デフォルトの名無しさん
2009/01/11(日) 00:58:08速度関係で一番引っかかるのが接触判定と描画だから
内部FPSは120くらいにして、
120fpsで座標変換とかやって
2回に一回(つまり60fps)で描画処理やって
3回に一回(つまり30fps)で接触判定やってる。
ただし、描画よりも接触判定のほうが少ないから弾すり抜けが起こりうる。
でも、まあ怒首領蜂とかそうだったし、べつによかね? と思ってるけどなー
0019デフォルトの名無しさん
2009/01/11(日) 01:04:19厚みのある線と線で接触判定するとすり抜けない。
その代わり処理は重くなる。
0020デフォルトの名無しさん
2009/01/11(日) 01:06:54レーザー的な何かはそうやって処理してるけど、
・加速・減速する弾幕
・放物線を描く弾幕
とかはすり抜けずに処理できるのん?
いや、俺が数学の知識ないだけなんだろうけどさ。
0021デフォルトの名無しさん
2009/01/11(日) 01:21:220022デフォルトの名無しさん
2009/01/11(日) 01:21:40でも、弾幕STGではそんなことやってたら重くなると思うし、
正直すり抜けても避けたのと区別できないと思うので
真面目に当たり判定しなくていいと思うw
0023デフォルトの名無しさん
2009/01/11(日) 02:09:330024デフォルトの名無しさん
2009/01/11(日) 09:40:43敵or敵弾VS自機などはある程度適当でもいい気がする
0025デフォルトの名無しさん
2009/01/11(日) 17:04:12前回の位置と今回の位置を繋いだものだけを考えればよい。
微分の考え方とはそういうものだ。
実際に、放物線状に動く物体を、1フレームあたりには直線で動かしているだろ?
リアルタイムのゲームは、1フレームの時間を�冲として微分した処理を繰り返す、と言うこともできるだろう。
0026デフォルトの名無しさん
2009/01/11(日) 17:13:21特定の軌跡を描くように物体を飛ばそうとした時に
時間に対する x, y の微分係数を増分として使って計算してしまうと、
徐々にずれていってしまうんだよな。
微分係数は使えず、直に座標を計算しないといけない。
0027デフォルトの名無しさん
2009/01/11(日) 22:22:34まったくついていけないぜ。
0028デフォルトの名無しさん
2009/01/11(日) 22:38:44アホなレスをしてるのが研究員で賢い受け答えをしているのがアイちゃん
0029デフォルトの名無しさん
2009/01/12(月) 01:36:59まだPen2の266Mhzとかターゲットなの?
0030デフォルトの名無しさん
2009/01/12(月) 01:38:50DSとかだろ
0031デフォルトの名無しさん
2009/01/12(月) 02:14:020032ワカメ
2009/01/12(月) 21:14:24ゲームの会話のように1文字づつ表示させようとするとたまに鈍足になります。
古い機種ってのも問題なんだけど、(´・ω・`) コードに問題があると思いますか?
0033デフォルトの名無しさん
2009/01/12(月) 21:50:4160FPS固定にまさかSleep(16)とかやってないざますよね?
// 今時ならCPU最低でも1GHzは欲しいな。
// できることなら2コア2GHz以上で、DirectXとか使うならGeForce8600GT以上が理想。
// 4コアCPUx2で、GeForce9800GTXx2で、DDR3メモリとかなら最強。
// 但し最強PCで最適化して開発すると世の中のほとんどの人がプレイできないという諸刃の剣。
// 初心者にはオススメできない。
0034デフォルトの名無しさん
2009/01/12(月) 22:09:12理想じゃなくて、最低限。特に後半、今だったら9600GTになるから8600GTより改善する。
>// 4コアCPUx2で、GeForce9800GTXx2で、DDR3メモリとかなら最強。
最強じゃなくて、そこそこ優秀。最強を謳うなら8コア位持ってこないと。それに、何故GT200チップが出てこないんだ?w
0035デフォルトの名無しさん
2009/01/12(月) 23:27:04DrawTextはお話にならないぐらい重いので自分でフォント描画クラス作成したほうがよい
0036デフォルトの名無しさん
2009/01/12(月) 23:27:54×初心者にはおすすめできない
○自己満以外にはおすすめできない
0037デフォルトの名無しさん
2009/01/12(月) 23:37:44最初に文字を何かテクスチャに描画して
文字を表示するときはそのテクスチャをスプライトに描画すると良いって
うちの母ちゃんが言ってた
そのとき等幅フォントだと
ノベルゲームのように1文字ずつ表示するときに計算が楽って
近所のゆとりキャバ嬢が言ってた
俺はそんなに頭良くないから
実は内部でGDI描画してるなんてことも知らずに
DrawTextで頑張ってる
頑張れば必ず結果はついてくる
0038ワカメ
2009/01/13(火) 00:04:29int Wait=0; /////WAIT
(メインループ) 速度=(1000/120)
↓ wait=wait+1;
↓ if(wait>=30) { 何か処理;wait=0;}
こんな感じで、ウェイトかけてます。 35さん37さんのは難しそう。
0039デフォルトの名無しさん
2009/01/13(火) 00:34:270040デフォルトの名無しさん
2009/01/13(火) 00:48:11ttp://www.c3.club.kyutech.ac.jp/gamewiki/index.php?%CA%B8%BB%FA%CE%F3%C9%C1%B2%E8
0041デフォルトの名無しさん
2009/01/13(火) 01:18:09フォントまわりはめんどくさいんだけど、きちんと実装しておくと後々応用が利くから手をつけてみるとよい。
ttp://marupeke296.com/DXG_Font.html
こういう実装が基本的になるけど、オレだったらフォントデータはツール化何かで作ってしまうな。
もっと効率のよい方法はいくらでもあるけど、とりあえずこのあたりから手をつけてみてたどうだろうか?
0042ワカメ
2009/01/13(火) 21:47:04(´・ω・`)なんだか、ワクワクしてきました。
0043デフォルトの名無しさん
2009/01/13(火) 22:37:21原因と対処法を教えてください
0044デフォルトの名無しさん
2009/01/14(水) 01:13:00うーん、どうもFPS周りが要領を得ないんだが、自分だけだろうか。
ちゃんとゲーム速度が一定になるように作ってる?
>速度=(1000/120)
って書いている辺り、そうしているようにも見えるけど
Sleepなんて使う必要ないだろうし、鈍足になるっていうのもFPSが下がっているとしか思えない。
念のため説明するとゲーム速度を一定にする方法は、知る限りおおむね2つ。
1. 可変FPS。経過時間に応じて移動距離などを決める。
2. 固定FPS。経過時間に応じて描画処理を飛ばし、処理時間を短縮する。(フレームスキップ)
2の場合、描画飛ばしても追いつかないくらい遅いと鈍足になる。
>>43
お客さん、スレ違いって言うか板違いっすよ。
0045デフォルトの名無しさん
2009/01/14(水) 01:49:27メインループは60fpsキープで描画は30fpsとかね。
0046デフォルトの名無しさん
2009/01/14(水) 03:17:21ttp://www.4gamer.net/specials/3de/lost_planet/lost_planet_01.shtml
ttp://game.watch.impress.co.jp/docs/20061025/3dvf5.htm
0047デフォルトの名無しさん
2009/01/14(水) 14:15:31よしじゃぁこれで作るか
ttp://www.dospara.co.jp/hojin/special/r-s7hfc.html
0048デフォルトの名無しさん
2009/01/14(水) 14:33:04そこまで行くと、クロス開発のプラットフォームにはいいけどターゲットには向かないね。
0049デフォルトの名無しさん
2009/01/14(水) 15:49:170050デフォルトの名無しさん
2009/01/14(水) 17:24:39よく見たらサーバーだった・・・orz
よし、じゃぁ責任とってMMORPG作るぞ
ということでWiki作ってきた
ttp://www19.atwiki.jp/mmorpg46/
0051デフォルトの名無しさん
2009/01/14(水) 17:52:130052デフォルトの名無しさん
2009/01/14(水) 18:06:120053デフォルトの名無しさん
2009/01/14(水) 18:16:440054ワカメ
2009/01/14(水) 23:48:51(´・ω・`)何だか怪しいというので、コードうpします。
確かにじしんがありません。
#define FRAM (1000/120)
UpdateWindow(hWnd);
//////リアルタイム処理
timeBeginPeriod(1);
DWORD dwTime=timeGetTime()+FRAM;
while(TRUE)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}else{
if(dwTime>timeGetTime()){
Sleep(1);
continue;
}
dwTime=timeGetTime()+FRAM;
wait=wait+1;
if(wait>=調整具合){
(キー処理);wait=0;
}
(画面クリア)+(いろんな条件+描画系)+(バック画面切り替え)
if(endkey==1){DestroyWindow(hWnd);break;}
}
}
timeEndPeriod(1);
return msg.wParam;
まだ、コード生成中で、DrawText を使わない方法ためしてません。
0055デフォルトの名無しさん
2009/01/15(木) 00:12:140056デフォルトの名無しさん
2009/01/15(木) 02:04:45正直言うと、ここ数年ゲーム作ってないんでアレだけど、
ちょっかいかけてしまった手前いくつか。ループ部分だけね。
while(TRUE)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) //(1)
{
if(!GetMessage(&msg, NULL, 0, 0)){break;} //(2)
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if(dwTime > timeGetTime()){continue;}
dwTime += FRAM; //(3)
//内部処理
if(dwTime < timeGetTime()) //(4)
{
//描画処理
}
}
}
改行多すぎた↓
0057デフォルトの名無しさん
2009/01/15(木) 02:05:30(2) 元のコードは終了処理が無茶苦茶。ループはここで抜けること。
DestroyWindow→WM_DESTORYを貰う→PostQuitMessage→WM_QUITをGetMessageという流れ。
DestroyWindow(hWnd);break;ではWM_DESTROYすら処理されない。
(3) 今のフレーム+1フレームの時間=次のフレーム。
timeGetTime()+FRAMでは、1フレームに時間が掛かれば掛かるほど次のフレームが遅くなる。
(4) 次のフレームまで、まだ時間がある時だけ描画する。
内部処理に1フレーム時間以上掛かる場合、描画しなくなるが普通問題ないと思う。
心配ならそれ用の判定もつける。
こんな感じでいくらか改善するかと。
CPU99%はよく分からないな。少なくとも自分のプログラムではならない。
間違いがあったらごめんね。
0058デフォルトの名無しさん
2009/01/15(木) 02:40:16そのへんの基本的なことも分かってないやつがCPU100%使用するコードを平気で書く
0059デフォルトの名無しさん
2009/01/15(木) 03:38:45けど、ぐぐってみるとSleep使うって案が大半だった。
もしかしたら自分もSleep使っていたのかもしれない。うそ教えてごめんね。
if(dwTime > timeGetTime()){continue;}
は、元通り
if(dwTime > timeGetTime()){Sleep(1);continue;}
にしてみて。
0060デフォルトの名無しさん
2009/01/15(木) 07:42:440061デフォルトの名無しさん
2009/01/15(木) 12:36:500062デフォルトの名無しさん
2009/01/15(木) 23:48:470063デフォルトの名無しさん
2009/01/16(金) 00:03:43精度高くないから、0のがオヌヌメ
0064デフォルトの名無しさん
2009/01/16(金) 02:15:010065ワカメ
2009/01/16(金) 21:07:43ない。今日には完成させたい。とりあえず、ファミコン見たく、使う文字だけを、
マップチップのように使うことにした。
コードの件だけど、Sleep(0) もSleep(1)もあまり変わらなかった。Sleep(1)のほうが
やはりCPU使用率が普通になる。56>>さん DestroyWindow(hWnd);break 実は
ここでコールバックで、DirectX 解放させてました。
0066デフォルトの名無しさん
2009/01/17(土) 03:03:150067ワカメ
2009/01/18(日) 14:26:51え〜ととりあえず。まとめてみます。↓
文字表示は、40>>41>>さんの言うとおり、DrawTextは遅いので使わない、描画クラス、
または、表示用関数で絵として描く。Celeron 550Mhzでも高速に表示できました。
メインループにつきましては、ググリまして特に問題ないようです。
TranslateMessage(&msg);も場合によっては不要のようです。
PM_NOREMOVEは、軽いが、画面移動できず。フルスクリーンオンリーには、やくにたちます。
PM_REMOVEは、画面移動できるようになります。
とりあえず、この処理を取り入れたデモソフトができたので、Upしようと思いますが。
不要ですか?ほしい人がいたら書きます。
内容:2D背景スクロール理論&NO DrawTextで文字表示&キャラジャンプ理論&敵の移動
キャラクタを操る、基本的な2Dゲームのテスト
0068デフォルトの名無しさん
2009/01/18(日) 22:02:56今更だがアンカーは>>数字の形にしてくれないか
追いにくいんだが
0069ワカメ
2009/01/18(日) 23:56:39音、画像等、あれですから、怒られないように、ちょいいじりました。
←:左移動 →:右移動 SPACEKEY:ジャンプ ESC:終了
Celeron 550MHZ以上 DirectX 8.0 VC++ 6.0
単純なデモテストなんで、ソースコード入れてません。 (´・ω・`)
0070デフォルトの名無しさん
2009/01/19(月) 00:09:19こんなけできてればあとはゲーム作るだけだね。
0071デフォルトの名無しさん
2009/01/19(月) 00:18:07ってどういう意味?
0072ワカメ
2009/01/19(月) 00:22:05ので、余計な処理をはぶいてます。(´・ω・`) 早く面白いゲーム作りたいですね、
しかし、それにしても、参考書とか買っても、多分これだけだと、挫折してたと思う、
今ネットとかで、調べられるけど、本だけだとどれも、重要な事が抜けてる。
0073ワカメ
2009/01/19(月) 00:32:43できませんでしたが、ちょい処理がスムーズな感じがします。なので、
フルスクリーンオンリーでやるなら、ドラッグ&ドロップすることないから、良いのかと、
でも中にはフルスクリーン切り替えのできない機種もあるので、ちょっと・・
(´・ω・`)わすのサブPC SOTEC E-ONEがそれ、まじでウンコたん。しかもスケルトン。
0074デフォルトの名無しさん
2009/01/19(月) 00:43:51そんな話聞いたことないな・・・
ちゃんとPM_NOREMOVEでチェックしたあとGetMessageなりPM_REMOVEしている?
0075ワカメ
2009/01/19(月) 01:25:25きた、でもどちらがいいのだろう、どこもこの問題がでてる、
PM_NOREMOVE VS PM_REMOVE どちらが早い?だれかおすえて。
0076デフォルトの名無しさん
2009/01/19(月) 01:38:31普通にベンチマークとってみてくれ
それで俺にも教えてくれ
0077ワカメ
2009/01/19(月) 01:42:56ここに、くわしく載ってました、(´・ω・`)
つまりリアルタイム処理は、PM_REMOVE メッセージを使う処理WM_PAINT
WM_KEYDOWN その他など、PM_NOREMOVE でOK?
0078ワカメ
2009/01/19(月) 01:44:52ござる。
0079デフォルトの名無しさん
2009/01/19(月) 02:28:030080ワカメ
2009/01/19(月) 20:20:53またそれ相当のベンチソフト見つからない、前に進めないんで、このままソフト
作りに入ります。
0081デフォルトの名無しさん
2009/01/19(月) 23:01:43ム板ならむしろバイナリ無しのプロジェクト一式だろう。
それと参考書どうこう言ってたが、ちょっとした分野なら、一冊で全て分かるなんてないから。
書籍もWebの記事も沢山読んで沢山勉強してくれ。
まあ頑張れ。
0082デフォルトの名無しさん
2009/01/19(月) 23:34:320083デフォルトの名無しさん
2009/01/20(火) 03:13:47新卒でゲーム会社狙ってんだけど、
C++の基本書の他には何を読めばいいかな?
0084デフォルトの名無しさん
2009/01/20(火) 03:45:55「ゲームプログラマーになる前に覚えておきたい技術」は業界の間でも割りと好評。
あと「実例で学ぶゲームAI」
0085デフォルトの名無しさん
2009/01/20(火) 04:02:540086デフォルトの名無しさん
2009/01/20(火) 04:23:300087デフォルトの名無しさん
2009/01/20(火) 06:01:31サンクス
姉妹書の「実例で学ぶ数学3D」に異常に惹かれた
0088デフォルトの名無しさん
2009/01/20(火) 19:19:30それ買うなら
ゲームプログラミングのための3Dグラフィックス数学
のほうがいいと思うぞ
0089デフォルトの名無しさん
2009/01/20(火) 21:30:40C++ の入門書も持っておいた方がいいよ。
というか、今、この本かなり品薄なんだよな・・・。
0090デフォルトの名無しさん
2009/01/20(火) 21:46:22なぜ?
0091デフォルトの名無しさん
2009/01/20(火) 22:17:08タイトル通り、プログラムを作る前段階の基礎知識をおさえるための本だね。
セガの人が書いたから、もっとリアルな話があるかと思ったけど、
ものすごく基礎的、かつ、抽象的なところに終始してる。
(まあ、守秘義務とかあるだろうから、書けなかったのかもしれないけど)
新人とかの集合教育をやれば分かるけど、プログラム作成の経験者も
いれば、スタート地点にすら立ってないレベルとかもいる。
最低限のレベルを揃えるためには、いい本だと思う。
0092デフォルトの名無しさん
2009/01/29(木) 09:18:31>(まあ、守秘義務とかあるだろうから、書けなかったのかもしれないけど)
本人の日記や講演の記事をみたら守秘義務云々以前の問題なんじゃね?と思ってしまう
0093デフォルトの名無しさん
2009/01/29(木) 23:01:000094デフォルトの名無しさん
2009/01/30(金) 00:21:23まぁ、ゲーム関係のプログラミング知識はあるに越したことがないんだけど、
大学での研究とかベーシックな内容を問われることも多いから、今まで何やってきたかとかのほうが重要になるかもな。
あの本は就職が内定してからでも遅くはない。
0095デフォルトの名無しさん
2009/01/30(金) 23:17:23僧侶版◆ttp://jp.youtube.com/watch?v=XcKYbwmT3v8
元ネタ◆ttp://jp.youtube.com/watch?v=wQYpp5wRCsw
僧侶版◆ttp://jp.youtube.com/watch?v=jFtLUhWSibo
0096デフォルトの名無しさん
2009/01/31(土) 23:43:00m_dir = FOR;
Sleep(500);
}
DirectInputでキーボードから入力値を取得しています
Sleep()を抜くととてつもない速さでカーソルが移動してしまいます
Sleep()を使うとほかの処理も止まってしまうので
他の処理をとめないで同じようなことできる方法ありませんか?
0097デフォルトの名無しさん
2009/02/01(日) 02:02:180098デフォルトの名無しさん
2009/02/01(日) 11:53:26押されたのか(OFF→ON)
離されたのか(ON→OFF)
押しっぱなしなのか(ON→ON)
押されてないのか(OFF→OFF)
の判断ができないよ
0099デフォルトの名無しさん
2009/02/02(月) 16:31:420100デフォルトの名無しさん
2009/02/21(土) 07:47:03ゲームプログラマになる前に覚えておきたい技術
http://www.shuwasystem.co.jp/gpro-sp/
0101デフォルトの名無しさん
2009/02/21(土) 11:11:08■ このスレッドは過去ログ倉庫に格納されています