[過去ログ]
ゲームプログラミング相談室【Part5】 (970レス)
ゲームプログラミング相談室【Part5】 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
376: 名前は開発中のものです。 [sage] 03/08/06 22:58 ID:O4yO5Rri >374 ブラウザって縛りがなければSDLでない? win,linux,mac,beOS 3DはOpenGLに対応してる 非対応hardならsoft側で処理してくれるとか net関係のライブラリもあるし なによりタダ http://echo.5ch.net/test/read.cgi/gamedev/1036410116/376
377: 名前は開発中のものです。 [sage] 03/08/06 23:36 ID:aF4kdC5r 道具揃えたところで登れるわけじゃない罠 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/377
378: 名前は開発中のものです。 [sage] 03/08/09 00:32 ID:HrZMFzRr 本格的にMMOとか作るならSDL+Delphi+C++、 お手軽なミニゲーム作るならJavaでアプレットってとこかな? JavaってJDK1.4になってからとんでもなく画面更新が早くなって 2Dのゲーム動かすならJAVAで十分だとおもうんだけどどう思いますか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/378
379: 名前は開発中のものです。 [] 03/08/09 12:15 ID:1QmqaJBe 実際に本職のゲームプログラマーになりたいんですが最初に学ぶ言語はどれが良いんですか? フリーのソフトはありますが解説が少ないので… プログラムの学習用はVB.NETとVC++.NETのどちらが良いですか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/379
380: 名前は開発中のものです。 [sage] 03/08/09 12:24 ID:B5VyROWZ >>379 言語はC。理由はこれを使ってないところはまずないから。 んなわけで学習用にはVC++.NET。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/380
381: 名前は開発中のものです。 [sage] 03/08/09 12:47 ID:1QmqaJBe >>380 ありがとうございます、買う決心がつきました。 買って来ます。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/381
382: _ [sage] 03/08/09 13:13 ID:S+GKUahg http://homepage.mac.com/hiroyuki45/jaz09.html http://echo.5ch.net/test/read.cgi/gamedev/1036410116/382
383: 名前は開発中のものです。 [sage] 03/08/09 19:55 ID:sSIjT8eK 質問です。 VC#.NetでIPを使った1対1の簡単なチャットのようなものを作る場合、 どのような方法を使えばいいですか? IPでの双方向リンクの仕方が全く分からなくて参考書も探したのですが、 あるのはWebアプリの作り方ばっかりで…どなたか教えて頂けませんか あるいはそのことが乗っている本を紹介して頂けませんか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/383
384: 名前は開発中のものです。 [sage] 03/08/09 19:56 ID:sSIjT8eK ゲ製板なので板違いかも知れませんが、 IPチャットが可能であれば1対1のネットゲームも作れるかもしれないと思いまして… すいませんです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/384
385: 名前は開発中のものです。 [] 03/08/09 20:44 ID:44BF5mIM PCゲームってのはコア層がやるもんだよ。 過去の現象見ても、事務機としての普及が第一だろうね。 はっきり言ってLinux/UNIXは汎用的な事務機としてはロクなもんじゃない。 基本的に計算機の玄人が使うようにできてるからな。 事務屋にゃ扱える代物じゃねーんだよ。 ただ、つけいる隙はあると思うね。 Linux/UNIXはUIの取り換えがきくから、専用機として作り込むのにはWindows なんかより断然いいだろう。 そこらへんのじじばばが何気に街角で触ってる機械が実は誰も知らないけど Linuxでしたなんて現象はこれからどんどん増えるだろうね。 事務機としてもマルチウィンドウが必要なところってのは実はあんまり無い。 その証拠にほとんどのWindowsユーザはアプリケーションを最大化して使って るじゃない。 Xなんか使わなくてもDOS時代のUIを思い出せば充分使えるものになるだろうね。 むしろその方が混乱が無いだろう。アクティブウィンドウが切り替わっただけ で「パソコン壊れたー!」ってパニック起こす連中を嫌と言うほど見て来た。 パソコンとしてもそれに適したUIが出て来れば使う人はいるだろうね。 そのへん頑張ってるのがKDEやGnomeだが、こっちはさほど利点が無いから難し いな。 NECや富士通が気合い入れて自社UIを作って出しゃいいんだがな。KDEやGnome ベースでもいいからさ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/385
386: 名前は開発中のものです。 [sage] 03/08/09 22:23 ID:3r+YGxL4 ??? 誤爆? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/386
387: 名前は開発中のものです。 [sage] 03/08/13 10:49 ID:BCiRQ/m1 >>383 このあたり? Microsoft.DirectX.DirectPlay System.Net.Sockets.TcpClient System.Net.Sockets.TcpListener System.Net.Sockets.UdpClient http://echo.5ch.net/test/read.cgi/gamedev/1036410116/387
388: 山崎 渉 [(^^)] 03/08/15 08:02 ID:IMRBSWHe (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン http://echo.5ch.net/test/read.cgi/gamedev/1036410116/388
389: 名前は開発中のものです。 [sage] 03/08/16 10:03 ID:2rCICvIn atan2用のテーブルの作り方がわかりません(涙 cos,sinは角度を使って作ればいいのはわかるんですが、 atanの添え字って一体何を基準に用意しているんでしょうか? tanの逆関数なのでsin/cos(?)と思っても、 どんな範囲で値を用意すればいいのか。 ここを参考にしてるのですが、 ttp://www.sun-inet.or.jp/~yaneurao/intensive/tips2.html 肝心のテーブルが作れないのです。 0〜1までの範囲で自分の好きな少数で <math.h>のatan()から求めて256段階に スケーリングすればいいだけでしょうか? 頭が悪いのは重々承知しておりますので、 何卒ヒントを(;´Д`) http://echo.5ch.net/test/read.cgi/gamedev/1036410116/389
390: 名前は開発中のものです。 [sage] 03/08/16 10:06 ID:2rCICvIn >0〜1までの範囲で自分の好きな少数で すみません好きとか関係ないですね。 0〜1までの256段階の少数(float 0/255〜255/255)で、 という意味で受け取ってください。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/390
391: 名前は開発中のものです。 [sage] 03/08/16 13:23 ID:dCYb1D0y まず、0度〜45度の範囲に限定してテーブル化してみるべし。 この範囲ではθとtan(θ)はほぼ比例関係にあるから、単純な補間ですむ。 残りの角度についてはこのテーブルの参照方法を工夫するだけ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/391
392: 名前は開発中のものです。 [sage] 03/08/17 09:28 ID:jm7zYaU+ >>387 そうそれそれ! そのネットソケットに関する、なにか参考書ないですか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/392
393: 名前は開発中のものです。 [] 03/11/08 21:38 ID:eeIVVo6R 質問です。 timeGetTimeの返す値って、PC起動してから時間が立つほど不正確になるもんなんですか? Cで音ゲーを作っていて、メッセージループはポーリングにしてます。 で、降ってくるモノとかの移動距離を 「(今のtimeGetTime()の値 - 前回ループ時のtimeGetTimeの値)/1000*1秒間に移動したい距離」 のようにして算出しているのですが、 PC起動してから長時間たっていると、動きがガクガクするのです。 ポーリングの場合の移動量の算出方法って、↑以外にもあるんでしょうか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/393
394: 名前は開発中のものです。 [sage] 03/11/08 21:54 ID:5O2oS72Q >timeGetTimeの返す値って、PC起動してから時間が立つほど不正確になるもんなんですか? そんなことはないはず。 >ガクガク それって、PC立ち上げて全く何もせずに(触らずに)しばらく置いておいて、 ゲームを立ち上げると、「最初か」らガクガクしてしまうってこと? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/394
395: 名前は開発中のものです。 [sage] 03/11/08 22:03 ID:eeIVVo6R >>394 いえ、PCを立ち上げてから何をしていたかは関係なさそうです。 現に今、PC起動後20時間半たってますが、そのexeを起動するとやっぱりガクガクします。 PC再起動すると、スムーズに降ってくるんですよ。ちょっと念のため確認すます。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/395
396: 名前は開発中のものです。 [sage] 03/11/08 22:16 ID:5O2oS72Q 本当にtimeGetTime()が原因なの? 描画が遅くなってるとか無い? たとえば、ハードウェアで描画してたものが、(リソースが足りなくて?)ソフトウェア エミュレーションになってしまっているとか。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/396
397: 名前は開発中のものです。 [sage] 03/11/08 22:30 ID:eeIVVo6R 変なこと言ってしまった…。>>395を言い直し。 現に今、PC起動後20時間半たっていて、janeとかメディアプレーヤーとか、いろいろ操作をしていて、 起動してもガクガクです。 と言いたかった。 で、新たに気が付いたことがあるんですが、 ガクガクの時に、起動していた他のアプリ(msnメッセンジャー、覚え書、UD)をいろいろ落としてから、 自分の作ったゲームを起動してみたんです。 するとガクガクがひどくなり、降ってくる一方のはずのオブジェが、逆行する始末。 振ってきたり上がったりしながら、徐々に落ちてくる感じになりました。 そして今再起動したんですが、よく見ると完全にスムーズじゃないです。 体感で、300ms毎くらいに少し「カクッ」とします。 ちなみにwin2000です。 >>396 あくまで今の知識で考えうる範囲から、timeGetTimeのせいなのかなーと思っただけです。 原因がどこにあるかまだはっきりとはわからず。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/397
398: 名前は開発中のものです。 [sage] 03/11/08 22:59 ID:5O2oS72Q なんかありえないなぁ。 逆行したってことは、timeGetTime()の値が逆行したってことだよね?>>393の計算方式なら。 とりあえず、timeGetTime()のログでも取っておいて本当に逆行してるのかを確かめたほうがいいね。 (違うところが原因のような気がするけど…) >ポーリングの場合の移動量の算出方法って、↑以外にもあるんでしょうか? 1秒あたりの画面更新回数を一定に保って(60回とか)、 毎回「1秒間に移動したい距離/更新回数」を座標に足すという方法。 というか、こっちのほうが一般的。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/398
399: 393 [sage] 03/11/08 23:10 ID:eeIVVo6R 今、 timeGetTime()の値が前回と同じなら"a"を、 値がければ改行とその値をログに出すようにしたところ、 tgt=[3113327.000000]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa tgt=[3113343.000000]aaaaaaaaaaaaaaaaaaaaa tgt=[3113390.000000]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa tgt=[3113405.000000]aaaaaaaaaaaaaaaaaaaaa tgt=[3113421.000000]aaaaaaaaaaaaaaaaaaa tgt=[3113437.000000]aaaaaaaaaaaaaaaaaaaaaaa tgt=[3113452.000000]aaaaaaaaaaaaaaaaaaaaa tgt=[3113468.000000]aaaaaaaaaaaaaaaaaaaaa tgt=[3113483.000000]aaaaaaaaaaaaaaaaaa tgt=[3113515.000000]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa tgt=[3113530.000000]aaaaaaaaaaaaaaaaaaaaa こんな感じでした。そんなに頑張って回っていてくれたとは。 たまに長いところでカクッときてるのかなぁ…。 >>398 >1秒あたりの画面更新回数を一定に保って(60回とか)、 >毎回「1秒間に移動したい距離/更新回数」を座標に足すという方法。 その方法にしたいのですが、参考リンクとか教えていただけるとありがたいです…。 ぐぐってみたのですがいまいちうまく見つからず。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/399
400: 名前は開発中のものです。 [sage] 03/11/08 23:23 ID:/QRkzjvM >393 ム板からこんにちわ とりあえず >「(今のtimeGetTime()の値 - 前回ループ時のtimeGetTimeの値)/1000*1秒間に移動したい距離」 このあたりの完全なソースを晒すべし。 ひとつだけ言えるのは、直線を移動するだけなら 「ある時間(今-前)で移動する距離」を加算していくより、 絶対時刻(今-基準時間)から位置を計算した方が誤差が少ないかと。 あと個人的には、そもそも音ゲーなら、 表示位置はサウンドデータの再生位置を取得した方が正しいように思える。 再生位置取得関数の精度がどうなのかと言う問題もあるけど。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/400
401: 名前は開発中のものです。 [sage] 03/11/08 23:36 ID:+YvtntdZ >>399 あー。 CPU使用率100%だからうまくカウントできないんだろうか。 メインループのどこかでSleep(1)とか入れとくともう少しスムーズになるかも。 応急処置的な対処法だけど。 あと、フレームレート固定の方は、いいページ知らないのでURL提供は出来ない。 基本的には、1回の描画が早く終わりすぎたなら、その分Sleepするってことなんだけど… 位置の出し方は、>>400の方法のほうがいいと思う。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/401
402: 393 [sage] 03/11/09 11:53 ID:WRV9yPc0 一応、表示してるところも晒しておきます。これだけあれば十分でしょうか。 //座標コントロール関数の一部 fTgt = (float)timeGetTime(); //今の時間を取得 fFrame = (fTgt - g_fOldTime) / (float)1000; if(g_fOldTime==fTgt){ //前回と同じなら処理しない DBGP("a",0,0); // マクロ。>>399のログ return 1; } g_fOldTime = fTgt; //今の時間を前回時間として保存 DBGP("\ntgt=[%f]",fTgt,0); for(j=0; j<MAX_LINE; j++){ for(i=g_stLine[j].iMin; i!=g_stLine[j].iMax; bmdjMaxpp(&i)){ // g_iBpmとg_iHispeedは必ず1以上 g_stLine[j].stObj[i].fY += g_iBpm*g_iHispeed*fFrame; } } //表示関数の一部 for(j=0; j<9; j++){ for(i=g_stLine[j].iMin; i!=g_stLine[j].iMax; bmdjMaxpp(&i)){ //g_hdcOffはオフスクリーン BitBlt(g_hdcOff, (int)g_stLine[j].stObj[i].fX, (int)g_stLine[j].stObj[i].fY, iObjeW[g_stLine[j].iGazouSyurui], BMP_RECT_OBJE_H, hmdc, iObjeWs[g_stLine[j].iGazouSyurui], 0, SRCCOPY); } } >>401 sleep(1)入れると、描画が1秒毎になっちゃうんですけど…。 コンパイラがおかしい? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/402
403: 393 [sage] 03/11/09 12:25 ID:WRV9yPc0 現在、起動後13時間ほどたっているがカクカク具合は起動時と大してかわらず…。 UD起動してなかったのが関係ありそう。 >>400 わざわざム板からありがとうございます。 >絶対時刻(今-基準時間)から位置を計算した方が誤差が少ないかと。 やってみます。オブジェを最初に表示したとこを基準にするか。 >表示位置はサウンドデータの再生位置を取得した方が正しいように思える。 いまいち意味がわからないんですが…。 いまのところ、譜面データとしては1小節毎に文字列(可変)を持ち、 その文字数がその小節の最大分解能で、1ならオブジェ有り、0ならオブジェなし。 例えば"10101011"だったら4分・4分・4分・8分・8分("ドンドンドンドド")といった感じです。 で、例えばBPM120(1分間に4分が120個来るスピード)なら、 1小節の長さ(2000ms) / 文字数(上の例なら8) = 250ms 250msごとに、オブジェを降らすかどうか判定する、と。 >>401 sleepじゃなくてSleepでした。おかしいと思った。 CPU使用率は4%になりましたが、やっぱりカクカクします。 フレームレート固定方法、自分で考えるand調べてみます…。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/403
404: 名前は開発中のものです。 [sage] 03/11/09 12:35 ID:6q71izTr >402 >fTgt = (float)timeGetTime(); ポカーン ものですな。 DWORDのまま計算しなさい。 >コンパイラがおかしい? 環境のせいにするのは、ギリギリまで頑張った者のみが許される事です。 限界まで自分を疑うべし。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/404
405: 名前は開発中のものです。 [sage] 03/11/09 13:07 ID:VyHZekEO float型で表現できるのは、±10-38〜1038の範囲で、有効桁は7桁です。 double型では、±10-308〜10308の範囲で、有効桁は15桁です。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/405
406: 393 [sage] 03/11/09 13:23 ID:WRV9yPc0 >>404 最終的に座標(floatで持っている)の計算に使うから、最初からfloatにしてしまっていました。 ソース見直して、timeGetTime関係はすべてDROWDに直し、float使うのは座標の計算のときだけにして、 Sleep(1)もいれると、カクカクがだいぶ改善されました(完全になくなってはいない。) >環境のせい おっしゃるとおりです…。まだまだヘボプログラマーだなぁ。 sleepとSleepがあるとは知りませんでしたよ。 >>405 わざわざありがとうございます。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/406
407: 名前は開発中のものです。 [sage] 03/11/09 23:52 ID:P9DM5A3l 現在3DRPG風のマップを歩き回るプログラムを作るために、それ専用の3Dマップのデータ形式を吐ける マップエディターを作ろうとしているんですが、いきなり行き詰まってしまいました。 3Dのマップってどういう風な形式にすればいいのでしょうか? 2Dではマップチップを用意してマップデータファイルから、必要な範囲(画面の範囲)だけを抜き出して それを並べるだけでしたが、3Dの場合どうしたらいいのか思いつきません。 検索しても解説しているページを見つけられず、困っています。 まず、無い知恵を必死に絞って考えたのが、マップデータを、 固定物マップ(地面、建物、動かせない机・椅子) 準固定物マップ(動かせる机・椅子、アイテム) 自動物マップ(生き物、風車) の三つにわけて、 固定物マップを2Dのようなマス目方式で主人公の座標をマス目と普通の座標で管理し、 普通の座標でマス目一個分進むごとにマップチップを読み込む方式に。 準固定物・自動物マップをマス目で管理しない方式に。 とここまで考えて主人公が視点を回したときのマス目の読み込みをどうするのか、 準固定物・自動物マップをマス目で管理しないとすればどういう方式にしたらいいのか、 など分からないことだらけになってしまいました。 どなたか解決法、もしくは基本的な3Dマップの構成を知っておられましたら ご教示ください。 ああ、なんだかとんちんかんなことを書いてしまったかも・・・。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/407
408: 名前は開発中のものです。 [sage] 03/11/10 03:37 ID:+mkdtdCz >>407 マップだろうがobjectだろうが自分で使ってる形式でいいじゃんよ。 モデルデータと配置(シーン)データを混同してる。 カメラのカリング描画と配置(データ)を混同してる。 ポータルシステム、オクトツリーなんかで検索でもしてみれば。 つーか、そのレベルじゃ自分でtool作って3Dは無理じゃない? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/408
409: 名前は開発中のものです。 [] 03/11/15 00:36 ID:0SKvPsYa キーの押し離しがイベントで飛んでくる処理系があります。 (具体的にはLinuxの/dev/input/js0) こういう環境での同時押し検出(誤差の単独押しは無視)する際の定石などあるのでしょうか? 現在は下のようにしていますが、100000usecでは早すぎて1重押しを検出。 150000usecでは遅すぎて使えないという悲しい状態になっています。 int main(int argc,char *argv[]){ fd = open("/dev/input/js0",O_RDONLY); ioctl(fd,JSIOCGBUTTONS,&buttons); while(true){ FD_ZERO(&fds); FD_SET(fd,&fds); tim.tv_usec = 100000; tim.tv_sec = 0; if(select(fd + 1,&fds,NULL,NULL,timeout)){ read(fd,&js,sizeof(js)); if(js.type == 1){ button[js.number] = js.value; timeout = &tim; } }else{ for(int i = 0;i < buttons;i++){ printf("button%d:%d ",i,button[i]); } printf("\n"); fflush(stdout); timeout = NULL; } } return 0; } http://echo.5ch.net/test/read.cgi/gamedev/1036410116/409
410: 名前は開発中のものです。 [んんんんん] 03/11/15 03:25 ID:TJ14D+B6 C++初心者ですが・・・RPGのモンスターのステータスの初期化の仕方を教えてください。 HP,攻撃力、防御力、素早さ、exp、お金・・・ どうか皆様お願いいたします http://echo.5ch.net/test/read.cgi/gamedev/1036410116/410
411: 名前は開発中のものです。 [sage] 03/11/15 04:56 ID:hXpTaJGx >>410 struct Teki { char name[17];int hp; int atc;int def;int spd; int exp;int money; }; Teki teki[3]= { {"スライム",8,8,4,6,1,2}, {"ドラキー",10,10,5,6,2,3}, {"ドラゴン",50,80,50,30,200,100}, }; http://echo.5ch.net/test/read.cgi/gamedev/1036410116/411
412: 名前は開発中のものです。 [sage] 03/11/15 08:12 ID:QbqUtBsl >>409 たとえばABボタン同時押しで発動するアクションがあって、Aボタンが押されその直後に Bボタンが押されてもABボタンアクションが発動されてほしいってことかな? (そして現状は↑の場合だとAのアクションが発動してしまうと。) 単純に、Aアクション発動中でもABが押されたらAアクションをキャンセルして、 ABアクションに移行してしまう、でいいんじゃない? キャンセルの仕方は作ってるプログラムによるので一概には言えない。 マウスの3ボタンエミュレーションみたいにAアクションの発動を遅延させてBが入力される かどうかを待つという方法もあるが、レスポンス悪くなるしね。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/412
413: 名前は開発中のものです。 [sage] 03/11/15 09:25 ID:0SKvPsYa >>412 なるほど。 ゲームというかコントローラを使ったランチャー的な物を作成しようとしているので どちらかというと後者の発想の方がしっくり来そうです。 しかしながら、16ボタンのすべての組み合わせをチェックするとかは現実的では 無いため、どうしようかなと思案中です。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/413
414: 名前は開発中のものです。 [sage] 03/11/15 10:31 ID:QbqUtBsl 簡単に実装するなら、 ・ボタン押下イベント発生したら一定時間待って ・その間に発生したイベントがあるかチェックして、あるなら読み出して ・最終的に押されたボタンの組み合わせのアプリを起動する あたりでOKじゃないかな? 必ず遅延が発生するってのが気持ち悪いなら、もう少し工夫する必要アリ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/414
415: 名前は開発中のものです。 [sage] 03/11/15 16:51 ID:JXJsuPxy 議論白熱中のところお邪魔します この度アクション系ゲームを作ろうと思い立ちました これまではボード系ゲームのリアルタイム性の少ないプログラムしかしたことのないため 複数のキャラが同時に動いて判定をする、そんな仕組みの作り方に戸惑いを覚えています そこで質問なのですが、開発環境の関係からこのプログラムにC言語を使っています メモリ管理が不十分な動作環境なのでに動的なメモリの確保、開放を行うと 意図しない領域へのメモリアクセスが起こりハングする可能性を考えて オブジェクト指向の言語を使わないようにしています しかし、このようなオブジェクトが多いプログラムの場合 やはり各キャラ毎にオブジェクトを作成しながら出ないと、個々の動作制御や 判定、動作制限などの関連付けが上手くできません なにか良い方法、教科書、参考書などありましたらお教えください http://echo.5ch.net/test/read.cgi/gamedev/1036410116/415
416: 名前は開発中のものです。 [sage] 03/11/15 17:42 ID:cjiALARP 「動的なメモリの確保、開放を行う」と 「意図しない領域へのメモリアクセスが起こりハングする」は 関係ないだろ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/416
417: 名前は開発中のものです。 [sage] 03/11/15 18:37 ID:NMwl6EHM オブジェクト指向の言語を使わないってのも意味不明 C++で開発できるのにC使うのはアホらしい http://echo.5ch.net/test/read.cgi/gamedev/1036410116/417
418: 名前は開発中のものです。 [sage] 03/11/15 18:51 ID:ptxA9sKP >>415 ぜひJavaで >意図しない領域へのメモリアクセスが起こりハングする プログラムを書いてみてください。 提出期限はおとといということでお願いします。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/418
419: 415 [sage] 03/11/15 19:30 ID:JXJsuPxy >416 説明が不十分でしたね 動的なメモリの確保を行うと使用しているメモリ総量、位置が確実に算出できないため 実装していないメモリ領域への確保が起こりハングアップするということです >417 たとえC++であってもNew演算子等動的なメモリ確保命令を使用しないのであれば C言語で十分ではないかとおもいC言語を使用することにしました >418 可能ならJavaでの開発をしたいのですが 使用したいCPU用のクロスコンパイラが手に入らないのと OSによって保護されてない環境でのプログラムなので 動的なメモリ確保、開放をプログラマ側で監視、調整しないといけません このような用途には不向きな言語だと思い使用を断念しました プログラム自身は簡単です 実装メモリ以上の領域を確保すればよいだけですので そんなプログラムでもいいのでしょうか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/419
420: 名前は開発中のものです。 [sage] 03/11/15 19:53 ID:31uHGMH8 >>419 特殊な環境なら、まずそれを書け。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/420
421: 415 [sage] 03/11/15 19:57 ID:JXJsuPxy >420 >メモリ管理が不十分な動作環境なのでに動的なメモリの確保、開放を行うと これでは説明不足でしたか^^; http://echo.5ch.net/test/read.cgi/gamedev/1036410116/421
422: 名前は開発中のものです。 [sage] 03/11/15 19:59 ID:ptxA9sKP 具体的にターゲットとするOSとハード構成を記せ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/422
423: 名前は開発中のものです。 [sage] 03/11/15 20:00 ID:31uHGMH8 Windowsなのか、GBAなのか、MacOSなのか、Linuxなのか、それ以外か、 プラットフォームは何なのかハッキリさせろと言っているのだけど。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/423
424: 415 [sage] 03/11/15 20:04 ID:JXJsuPxy >>422 質問の回答に必要な情報とは思えなかったので 特に明記しませんでした OSというものは存在しません あるらしいのですが使うつもりはありません ハードウエアはかなり昔に生産中止となったドリームキャストです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/424
425: 名前は開発中のものです。 [sage] 03/11/15 20:21 ID:ptxA9sKP 次はコンパイラの製品名とミドルウエアの詳細を記せ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/425
426: 415 [sage] 03/11/15 20:36 ID:JXJsuPxy >425 質問に答えれば回答が得られるのでしょうか? コンパイラはフリーのgccのSH4クロスコンパイラを使っています ミドルウエアと呼べるようなものはありません 機器の制御関係はすべて自分で作ることになります http://echo.5ch.net/test/read.cgi/gamedev/1036410116/426
427: 名前は開発中のものです。 [sage] 03/11/15 22:13 ID:N6eiQqH1 秋葉原のラオックスBOOK館一新されてるけど やねうら某の本がゲームプログラミングコーナーから一掃されてた(笑 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/427
428: 名前は開発中のものです。 [sage] 03/11/15 22:47 ID:NMwl6EHM >使用したいCPU用のクロスコンパイラが手に入らないのと Javaゼンゼン分かってない。 >たとえC++であってもNew演算子等動的なメモリ確保命令を使用しないのであれば >C言語で十分ではないかとおもいC言語を使用することにしました C++もゼンゼン分かってない。 勉強しなおせ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/428
429: 名前は開発中のものです。 [sage] 03/11/15 22:56 ID:ptxA9sKP 動的なメモリー管理での問題が気になるのなら、 newをオーバライドして自前でヒープ管理すればいいだけの話です。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/429
430: 名前は開発中のものです。 [sage] 03/11/15 23:17 ID:QbqUtBsl ゲームをちゃんとデザインすれば、出てくるオブジェクトの最大数くらい算出できるだろ。 その最大数が実機のメモリ量を超えるようなら、当然デザイン的な意思決定が必要になる。 つまり、 ・最大数を抑えるように設計しなおす ・あらかじめ決めた最大数を超えたら、特別な処理をするようにする (余分なオブジェクトを消す、とか、それ以上オブジェクトが出現しないようにするとか) などだ(オブジェクトの種類によってそれぞれ最大数を決めるというのも良い手だ)。 いずれにせよ、どのようなゲームを作るかに強く依存する話なので、一般的な話としての 参考書は存在しないだろうね。ただ、アロケータについて論じた本や論文とかは有ると思う から、そういうのが参考になるかも?このへんは、マ板の人のほうが詳しいか。 というか、本当に悩んでるなら、問題ない程度に詳しくココで晒してみたら? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/430
431: 名前は開発中のものです。 [sage] 03/11/15 23:18 ID:QbqUtBsl マ板じゃなくてム板だったw http://pc2.2ch.net/tech/ http://echo.5ch.net/test/read.cgi/gamedev/1036410116/431
432: 名前は開発中のものです。 [sage] 03/11/16 01:40 ID:4zFB3hit > 実装していないメモリ領域への確保が起こりハングアップするということです mallocを、とりあえず正しく動作するように置き換えろ。 それができないようなら、「機器の制御関係はすべて自分で作る」なんて無理。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/432
433: 415 [sage] 03/11/16 02:57 ID:2l7gzWNA >428 >Javaゼンゼン分かってない >C++もゼンゼン分かってない プログラムを専門に勉強したことがないため 十分に理解してるとは言えないので何か思い違いをしているのでしょうか? どの部分がどのような理解不足をしているのか勉強のためにお教えください >429 >432 new、mallocをオーバーライドするって考えは思いつきませんでした 確保したメモリアドレスを随時監視して未実装メモリの場合 エラーとして返すようにすればいいのですね ちょっと考えてみます >430 簡単にいえばそうなのですが いつもはOSやコンパイラのメモリ管理に頼り切ってるので オブジェクトに必要なメモリ量、その配置が実際どうなってるのか知らないのです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/433
434: 415 [sage] 03/11/16 02:58 ID:2l7gzWNA 続き 少し前に同じような質問をプログラム板でもしたのですが 「メモリ管理機構を自前で作れ」という答えで終わってしまいました 数年前流行っていた時期に作ってみたときには用意するオブジェクト数が少なく 完璧とはいえませんが、何とかプログラマ側で管理しきれていました。 しかし、今回の企画にあわせてオブジェクトの数を増やしていくにしたがって 「どの状況下でどの程度の量がどの部分に配置されて使用されるのか」 が、把握できなくなってしまいました そこで、ゲーム系プログラムならこのような多数のオブジェクトを使用する例が多いため 自分の知らない「ちょっとしたテクニック」であえて動的にオブジェクトを量産しなくても 静的、もしくは準静的な確保によって乗り越えることができるのでは? はたまたオブジェクトを量産することなく動作させる方法があるのでは? と思い質問してみた次第です やはり根本的にコンパイラ自身を書き換えて問題のないメモリ確保の方法を確立する といった考え方のほうがスマートだという意見ばかりですので こちらの方向で考えてみようと思います http://echo.5ch.net/test/read.cgi/gamedev/1036410116/434
435: 名前は開発中のものです。 [sage] 03/11/16 03:35 ID:4zFB3hit > どの部分がどのような理解不足をしているのか勉強のためにお教えください とりあえず、Javaの動作原理、CとC++の思想的な違い、あとは自分で調べろよ。 > やはり根本的にコンパイラ自身を書き換えて問題のないメモリ確保の方法を確立する > といった考え方のほうがスマートだという意見ばかりですので だれもコンパイラを書き換えるなんていってないだろ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/435
436: 名前は開発中のものです。 [sage] 03/11/16 09:49 ID:sJV9ESEo >>434 >自分の知らない「ちょっとしたテクニック」であえて動的にオブジェクトを量産しなくても >静的、もしくは準静的な確保によって乗り越えることができるのでは? >はたまたオブジェクトを量産することなく動作させる方法があるのでは? >と思い質問してみた次第です そんなものは無い(きっぱり)。 普通のプログラミングでも行うように、そのソフトに最適なメモリ管理を行うだけ。 んで、「最適なメモリ管理」はどういうソフトなのかに強く依存するので一概には言えない。 以上。終わり。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/436
437: 名前は開発中のものです。 [sage] 03/11/16 09:59 ID:X2F6x4IR >>434 あんまり時代とズレてて浦島太郎と話してるみたいな気にさせるね。 結論から言うとそんな部分に力を入れる意味はまったくないね。 くだらないこと考えるのやめてさっさと組めよ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/437
438: 名前は開発中のものです。 [sage] 03/11/16 10:24 ID:HDZlRlF4 >>414 遅レスすみません。 >・ボタン押下イベント発生したら一定時間待って >・その間に発生したイベントがあるかチェックして、あるなら読み出して >・最終的に押されたボタンの組み合わせのアプリを起動する どこを安定とするのかが微妙なんです。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/438
439: 名前は開発中のものです。 [sage] 03/11/16 10:36 ID:sJV9ESEo 安定とは? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/439
440: 415 [sage] 03/11/16 12:57 ID:2l7gzWNA >>435 コンパイラを書き換えるという表現はよくなかったですね^^; gccをつかっているとオープンソースであることの利点でコンパイラやライブラリ 今回の場合だとLibcあたりを簡単に書き換えれるのでオーバーライドするよりも 直接書き換えるほうが面倒がすく問題点がわかり易いので、そんな風に考えていました >436 その最適なメモリ管理の方法を教えてもらいたかったのです どういうソフトか?はオブジェクトをメモリ一杯まで量産するようなタイプって事なのですが >437 たしかに今のOSとCPUとコンパイラに守られてかつメモリが豊富にある 現在の開発環境の状況からみれば、動的なメモリ管理自身をを疑って あえて静的な方法を取ろうとする事は、時代に逆行しているような意見かもしれません しかし、必要なオブジェクトを作成しようとして正常に動作せず その原因がメモリが足りず実装外のアドレスに確保している などということがあるため この部分が解決されないとメモリ不足で動かないのか それともバグで動かないのか把握できません すくなくとも最低限の規則を作らないとダメなのではないでしょうか? もっと簡単に質問するならば みなさんは動的なメモリ確保で問題がでたとき たとえばNew演算子を使った場合にエラーがでたとき どのように対処しているのでしょうか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/440
441: 415 [sage] 03/11/16 13:05 ID:2l7gzWNA >435 JAVAもインタプリタ、コンパイラ、JavaVMがそのCPUに対応していないと 動かないと思うのですが、それとも自分の知らない別のJAVA言語があるのでしょうか? C++とC言語の根本的な違いはクラスオブジェクトを使用するオブジェクト指向型言語に 進化していると言うことだと理解していたのですが? それとも、オブジェクト指向型言語はオブジェクト自身の完成度が高ければ 用意したオブジェクトを動的に追加,開放することで コードの簡易化、開発効率の向上が見込めるが 生成されるオブジェクトにとって十分なメモリ領域が必要である といった認識がまちがっているのでしょうか? こちらはスレ違いなので・・・スルーしてもらってもよいです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/441
442: 名前は開発中のものです。 [sage] 03/11/16 14:13 ID:DmkNbY6h >>415 自分で作ったメモリの動的確保なの?違うでしょ? それなのに、そのメモリの動的確保がおかしいなんて言ってるのが房っぽい。 そもそもドリキャスで使える前提の物なのかな? PS2だってee-gccって専用のコンパイラがあるのに、まさか普通のgcc使って ドリキャスで上手く行かないって騒いでるの? その開発が正規の手続きで不正な方法を使用してないならSEGAに相談すれば良いだろ。 仕事なら当然だろ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/442
443: 437 [sage] 03/11/16 14:28 ID:X2F6x4IR >>440 >しかし、必要なオブジェクトを作成しようとして正常に動作せず >その原因がメモリが足りず実装外のアドレスに確保している >などということがあるため >この部分が解決されないとメモリ不足で動かないのか >それともバグで動かないのか把握できません なにこれ?どうして全然関係ない問題を絡めて考えてるの? この状態でどうしてメモリ管理なんて自分でやろうというきになるのか全く理解できない。 冷静に考えてみて、こんなことがごちゃまぜになってること自体が問題でしょ。 だいたい一度溢れるまでロードしないとオブジェクトが正しくロードできてるか どうかもわからないプログラムってどうよ? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/443
444: 名前は開発中のものです。 [sage] 03/11/16 14:39 ID:DmkNbY6h >この度アクション系ゲームを作ろうと思い立ちました >これまではボード系ゲームのリアルタイム性の少ないプログラムしかしたことのないため >複数のキャラが同時に動いて判定をする、そんな仕組みの作り方に戸惑いを覚えています この時点で、その辺のゲー専の生徒レベル。 環境の所為にしてるが 大方、自分の頭の中で壮大な考え違いや 全然間違ってる可能性が高いと考えるのが普通。 いるだろ?コンパイラのバグだ、標準関数のバグだってスグ騒ぐ奴がさ… http://echo.5ch.net/test/read.cgi/gamedev/1036410116/444
445: 名前は開発中のものです。 [sage] 03/11/16 14:40 ID:h1Fvxjvv >>441 お前は >可能ならJavaでの開発をしたいのですが >使用したいCPU用のクロスコンパイラが手に入らないのと と言ってる。必要なのはクロスコンパイラじゃなく、その環境用のJavaVMだ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/445
446: 415 [sage] 03/11/16 15:02 ID:2l7gzWNA >442 使用しているCPUが汎用のSH4ですのでsh4のgccノクロスコンパイラを使用しています node,メモリ確保の方法malloc等はそのまま使えるもの(言語付属のもの?)を使っています 不正かどうかはまだはっきりしていませんが、正規の手続きでないので SEGAに相談のはもってのほか、開発環境を明らかにするのもためらいます もちろん、趣味でやってるだけなので仕事なわけではありません >443 全然関係ない問題といわれる意味がわかりません みなさんのメモリ管理の意識はどうなっているのでしょう? OSによってメモリ領域が保護されている場合ならともかく >ロードしないとオブジェクトが正しくロードできてるか どうかもわからない は普通に起こりえる事態だと思うのですが、なにが間違ってるのでしょうか? >444 べつに環境のせいやコンパイラのバグで騒いでいるわけではありません 問題がでるので別の回避方法を模索しているだけです 問題なく動くのであれば理論が判らなくて言語がなんでも気にしません >445 専門に勉強していないので表現が正しくなく混乱を招くのは申し訳ないです クロスコンパイラが必要というはその動作環境で動くように動作設定することと 大雑把に括って表現しました JavaでいうのであればもちろんそのCPU用のJavaVMが必要なので ということです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/446
447: 名前は開発中のものです。 [] 03/11/16 15:15 ID:X2F6x4IR >>446 変な部分だけピックアップするね。 >ロードしないとオブジェクトが正しくロードできてるかどうかもわからない じゃなくて、 俺は >>一度溢れるまでロードしないとオブジェクトが正しくロードできてるか >>どうかもわからないプログラムってどうよ? って言ったんだけどどうよ? はじめの部分重要だよ。変な風に曲げないでよ。 全然意味が違っちゃってて笑っちゃったよ。 ヘルプ正しく読めてるかどうかも不安になるでしょ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/447
448: 名前は開発中のものです。 [sage] 03/11/16 15:22 ID:25ri5rSm まったくスレの流れを見ずに言ってみるけど メモリの状態なんてコアダンプを吐いて読めばいいだけじゃないの? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/448
449: 415 [sage] 03/11/16 15:27 ID:2l7gzWNA すこし、話題がズレてきてしまっているので もう一度整理しなおして質問しようと思います OS等によってメモリ領域が管理されていない かなり特殊な動作環境でのプログラムをしています そのためメモリの確保、開放については プログラム側で常に注意しないといけないと思っています 特にコード的には確保できる領域も実際には 実装されていない事も考慮にいれないといけません 静的なメモリ確保方法ではコンパイル時に確保位置が把握できるため 問題をみつけることが簡単です しかし、動的なメモリ確保では変動するメモリ状況にあわせて 確保位置,量が変化するためプログラム側で逐次チェックするのが難しいです つづく http://echo.5ch.net/test/read.cgi/gamedev/1036410116/449
450: 415 [sage] 03/11/16 15:27 ID:2l7gzWNA 現在考えている企画はシューティングゲームのような 同時制御するキャラの多いプログラムです 各キャラを一つのオブジェクトとして構築したため 多種多なオブジェクトを量産する必要がでてしまいました このときオブジェクトの生成によって確保された動的メモリの 状況把握が十分できない為コンパイル時には問題がなさそうでも 実際動かしてみるとメモリ状況によって動作しない事があります このような場合、問題なく動かすためには どのような仕組みを最低限用意しないといけないのでしょう? 現状では動的メモリの確保時に成功、失敗にかかわらずエラーは起きませんが エラーであることを示すように改良することが可能かもしれません が、できればその仕組みを作らなくても良い方法を教えていただきたいです 使用してるコンパイラはgccのSH4用クロスコンパイラです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/450
451: 名前は開発中のものです。 [sage] 03/11/16 15:28 ID:M0Hd8bDl Q. 動的に確保したいメモリの量が不確定なので有限なメモリ上では 足りない場合があります。どうすればいいでしょうか? A. 確保したい量を確定しなさい こういう話じゃねーの? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/451
452: 415 [sage] 03/11/16 15:29 ID:2l7gzWNA >447 すみません、なぜ重要なのかが判りません 「一度溢れるまで」にはどのような意味が含まれているのでしょうか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/452
453: 名前は開発中のものです。 [sage] 03/11/16 15:56 ID:DmkNbY6h >>415 話を聞いてると、その症状自体が疑わしい。 その動的メモリ確保はシステムコールなのか? OS無いって言ってが、その状況で >確保された動的メモリの 状況把握が十分できない で、どうやって動的メモリ確保してるの? 環境は全部把握出来てるのか? 自分のバグで動かないのを、メモリの所為にしてるとしか感じられん。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/453
454: 447 [] 03/11/16 15:58 ID:X2F6x4IR >>452 じゃあ、逆に聞くけど >しかし、必要なオブジェクトを作成しようとして正常に動作せず >その原因がメモリが足りず実装外のアドレスに確保している >などということがあるため >この部分が解決されないとメモリ不足で動かないのか >それともバグで動かないのか把握できません どうして ・メモリが足りない問題 と ・オブジェクトが正常に動作しない問題 がわからなくなるのかわからない。 メモリに余裕がある状態で単一のオブジェクトの動作をチェックできる環境はないの? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/454
455: 名前は開発中のものです。 [sage] 03/11/16 16:00 ID:czdrL/Nj その前にオブジェクト指向言語と動的メモリの確保に、何の関係があるのか説明が欲しい。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/455
456: 名前は開発中のものです。 [sage] 03/11/16 16:04 ID:X2F6x4IR >>455 その辺突っ込んだら傷つくだろ・・・。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/456
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 514 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s