[過去ログ]
ゲームプログラミング相談室【Part5】 (970レス)
ゲームプログラミング相談室【Part5】 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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.c
gi/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/1036410
116/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/r
ead.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 じゃあ、逆に聞くけど >しかし、必要なオブジェクトを作成しようとして正常に動作せず >その原因がメモリが足りず実装外のアドレスに確保している >などということがあるため >この部分が解決されないとメモリ不足で動かないのか >それともバグで動かないのか把握できません どうして ・メモリが足りない問題 と ・オブジェクトが正常に動作しない問題 がわからなくなるのかわからない。 メモリに余裕がある状態で単一のオブジェクトの動作をチェックできる環境はないの? ht
tp://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
457: 名前は開発中のものです。 [sage] 03/11/16 16:11 ID:DmkNbY6h 言ってる事がめちゃくちゃで頓珍漢なんだよな。 ”OSなしで既存の動的確保がバグる”ってしか取れないんだけど。 では、その動的確保はその状況下で使用する前提の物なのか? そもそも、OSないならヒープもスタックも自分で管理、構築する以外に無いと思うんだけど。 人が用意してないら。 メモリマップとハードのメモリ使用の仕様は知ってるのか? 根本的にOS無いのに作る事自体が間違ってるレベルだと思う。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/457
458: 415 [sage] 03/11/16 17:05 ID:2l7gzWNA 議論が「メモリ確保が失敗するわけがない」というその一点に絞られているようですが どうやら、OSの無い状況下でのプログラムというのが 理解してもらえないようですね^^; 携帯電話、炊飯器などの組み込み機器などようなイメージで捕らえて貰えると わかりやすいかと思います >453 OSが存在しないのでメモリを確保するのにAPI等は使用しません 自由にメモリを使える反面、エラーが起きているのかも判断できません 自分で勝手に確保して勝手に開放します 正確にはmallocを定義しているLibcのコード
にしたがって確保開放を行います >454 オブジェクトはコードとデータの集合体という理解は間違ってないですよね? 「オブジェクトを量産する」という表現に誤解があるようですね これは同じインスタンスのコピーを作るということです 一つ目のオブジェクトは仮にロードすることが出来たとしましょう 一つだけなら問題なく動作することが確認できます 次に、このオブジェクトを量産することにします このオブジェクトに含まれるコード部分は共有できますが 含まれるデータについてはその独立性を保たないといけないので共有できません そこでオブ
ジェクトを量産するためには、追加されたオブジェクト用に 逐次動的にメモリを確保していくことになると思います しかし今回の環境のような場合動的なメモリを確保できなかった場合に 成功したのか失敗したのかがわかりません とりあえず確保成功したことにして動作を開始しますが 実は不確定なエリアのメモリを確保していたりすると正常に動作しません 専門用語についての知識が薄く表現が曖昧で申し訳ありません http://echo.5ch.net/test/read.cgi/gamedev/1036410116/458
459: 415 [sage] 03/11/16 17:15 ID:2l7gzWNA >457 まったくおっしゃる通りでこのまま作成するのは無理のある状況だと思います しかし、無理を承知でなんとかこじつけながら作成していこうと考えています プログラム自身が単純でメモリの残量についてあまり考慮しなくていい場合は 難しいメモリアロケートの心配などせずに、まさに適当に勝手に確保することで それなりのモノが作れました が、それでは上手くいかない事態に陥ったので、みなさんの知恵をかりにきた次第です メモリとハードの仕様は不完全ながらも、使える程度には理解しているつ
もりです http://echo.5ch.net/test/read.cgi/gamedev/1036410116/459
460: 名前は開発中のものです。 [sage] 03/11/16 17:16 ID:DmkNbY6h >>415 ああ、君のレベルが理解出来たよ。 システムコールって分る? >自分で勝手に確保して勝手に開放します それがバグと言うか、決定的な間違い。 じぁ、メモリが実アドレス以外を確保するのは ”自分のバグじゃん” そのバグ直せよ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/460
461: 名前は開発中のものです。 [sage] 03/11/16 17:31 ID:UylUiHD8 一般的なプラットフォームの場合、mallocだって最終的には、メモリ確保のAPIなりシステムコールなりを呼び出すと思うんだが、ということは、そのAPIやらシステムコールが無効なアドレスを返してくるってこと? それとも、mallocがAPIもシステムコールも使ってないのなら、どういう基準で確保可能領域を割り当てるんだろうか? メモリ確保可能な領域を知っているコードはどこかに在るの? もし、存在しなくて、手元にメモリマップの資料も無いならどうしようもないと思うんだけど。
http://echo.5ch.net/test/read.cgi/gamedev/1036410116/461
462: 名前は開発中のものです。 [] 03/11/16 17:37 ID:sJV9ESEo みんな良くこんな電波君に長々付き合ってるな… 暇なのか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/462
463: 名前は開発中のものです。 [sage] 03/11/16 17:52 ID:DmkNbY6h 今まで自分がどんなに頓珍漢な事言ってたか、 バカな実装してたか、アホな考えだったか、 を画面に向かって恥じてれば、まだ遅くはないレベルかと… http://echo.5ch.net/test/read.cgi/gamedev/1036410116/463
464: 415 [sage] 03/11/16 17:53 ID:2l7gzWNA >460 あまりレベルの高い話でなくてすみません 「システムコール」は MS-DOSでいうシステムコール WindowsシリーズでいうWin16、Win32API もっとローレベルでいうならBIOSコールのことだと推察したのですが? 違っていたのでしょうか? OSが存在せずメモリ確保のためにシステム側から用意された関数が無い場合 自分でメモリを確保しないといけないと思います そのメモリ確保方式に問題があり、異常の原因となることは理解しているのですが そのための良い解決方法が見つからないので相談にきました &
gt;461 メモリ確保の方法についてはgccのmallocをそのまま使用しているので gccのNewlib内のlibcのなかにmallocのコードがあるのでソレを参考にしてください メモリマップ自身は不完全ながら資料としてあるので 「ほんとに使えない領域なのか」は判りませんが「問題なく使える領域」は判ります 「どういう基準で確保可能領域を割り当てるんだろうか?」 まったく同じ疑問をもっています この環境においての動的なメモリ確保については完全に信頼できないと考えています そこで動的なメモリ確保をすることなく、オブジェクトを量産したいのです 一番初
めの投稿の形にもどってしまいましが^^; http://echo.5ch.net/test/read.cgi/gamedev/1036410116/464
465: 名前は開発中のものです。 [sage] 03/11/16 18:02 ID:DmkNbY6h >>415 OSが無いのにライブラリのmallocを使ってるのがありえない。 >まったく同じ疑問をもっています >この環境においての動的なメモリ確保については完全に信頼できないと考えています 完全に自分に責任がある部分でこの発言では 君には無理だからプログラムを辞めなよ。趣味だろうがねってしか言えない。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/465
466: 名前は開発中のものです。 [sage] 03/11/16 18:05 ID:9dhGVUv0 ていうか、組み込み系の得意な人に聞いた方がいいんじゃねぇか? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/466
467: 名前は開発中のものです。 [sage] 03/11/16 18:11 ID:czdrL/Nj >>458 >そこでオブジェクトを量産するためには、追加されたオブジェクト用に >逐次動的にメモリを確保していくことになると思います C++なら必要とされる最大量を静的に確保すればいいだけの話。 クラスだろうが構造体だろうが、データの置き方に変わりはない。 オブジェクト指向とは何の関係もない。 それでオブジェクト指向言語と動的メモリの確保に、何の関係があるのか説明はまだなの? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/467
468: 名前は開発中のものです。 [sage] 03/11/16 18:15 ID:shoK9bJg >>415 やっと具体的な環境が出てきたね。 ↓で聞いたほうが早いかもしれない。最近は止まってるから見てる人がいるのか分からんが。 そして僕はもういちど夢をみる[DCPrograming] http://pc2.2ch.net/test/read.cgi/gamedev/1014389313/ newlibのmallocに問題があるって聞いたこと無いけど、本当なの? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/468
469: 415 [sage] 03/11/16 18:18 ID:2l7gzWNA >465 mallocの実装自身にOSは関係ないと思います mallocの性能には関係するとおもいますが 一番単純な実装は指定された量確保してポインタをずらすだけですから 大雑把にいって今つかっているmallocのコードはそうなっています 「ありえない、出来ない、出来るようにしろ」の議論ばかりで 「問題を回避するためにどう工夫したらよいのか?」については意見がもらえないようですね どうも、OSのない環境でのプログラムについての議論はここでは出来ないようなので どこか別のスレッドを探して質問して
みることにします お騒がせしました http://echo.5ch.net/test/read.cgi/gamedev/1036410116/469
470: 名前は開発中のものです。 [sage] 03/11/16 18:23 ID:shoK9bJg だいたい、OSは、KOSを使ってるんじゃないの? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/470
471: 名前は開発中のものです。 [sage] 03/11/16 18:25 ID:shoK9bJg >>469 >一番単純な実装は指定された量確保してポインタをずらすだけですから ええと、じゃ、newlib環境では、どうやって「確保」してるの? それが分かってれば、確保してはいけないところまで確保してしまうことは避けられるでしょ? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/471
472: 名前は開発中のものです。 [sage] 03/11/16 18:27 ID:DmkNbY6h >mallocの実装自身にOSは関係ないと思います システムコールのbrk()を使ってるだろ。 >「問題を回避するためにどう工夫したらよいのか?」については意見がもらえないようですね だからさ、間違った前提の上の解決を求めるな、根本的な間違いを直せって理解出来ない? …この先、一生出来ないと思うよ。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/472
473: 名前は開発中のものです。 [sage] 03/11/17 00:12 ID:Q76r5V+r なにはともあれ、去ってくれてよかったよかった。 なんで、あんなに偉そうなんだろうねぇ? まぁ、自分の質問が理解できないのはこのスレの奴らがレベル低いからだ、とか思ってるんだろうな… じっさいには、まったくその逆なんだけどね。 もしかして「いや、ですから」とか書きたかったのかな?w http://echo.5ch.net/test/read.cgi/gamedev/1036410116/473
474: 名前は開発中のものです。 [sage] 03/11/17 00:35 ID:d6iGidgw 駄目な奴ほどプライドだけはなぜか高い。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/474
475: 名前は開発中のものです。 [sage] 03/11/17 00:51 ID:YWpMo6q6 プライドチキンってやつだな。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/475
476: 名前は開発中のものです。 [sage] 03/11/17 10:21 ID:afp8msI9 (⌒\ ノノノノ \ヽ( ゚∋゚) (m ⌒\ ノ / / ( ∧ ∧ ミヘ丿 ∩∀`;) (ヽ_ノゝ475ノ http://echo.5ch.net/test/read.cgi/gamedev/1036410116/476
477: 名前は開発中のものです。 [] 03/11/17 10:55 ID:Dih7ip87 まったく、議論になってないな 少なくとも相談に答えてやれよ メモリ環境は対応プラットフォームによって違うんだから そんなこと議論しててもしょうがないだろ? Q,動的メモリ確保をなるべく使用せずにクラスを構築するコツを教えてください A,なら、クラス宣言において使用する変数の量を減らしなさい 大容量のメモリが必要な場合はクラスの外側に変数おいて 自分で管理するようにしなさい Q,インスタンスをコピーしすぎてメモリ不足になったときの対処方法について教えて
ください A,各インスタンスに優先度をつけてメモリが足りなくなったら優先度のやつから開放できる 仕組みを考えなさい 組み込み機器のプログラムしたことあれば、こんなの即答でおわりじゃねーか http://echo.5ch.net/test/read.cgi/gamedev/1036410116/477
478: 名前は開発中のものです。 [sage] 03/11/17 11:35 ID:MkS3owz3 >>477 エスパー? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/478
479: 名前は開発中のものです。 [sage] 03/11/17 12:32 ID:Q76r5V+r >>477 というか、(同じ答えではないが)そう答えてるだろ? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/479
480: 名前は開発中のものです。 [sage] 03/11/17 13:33 ID:ChG5qnJg 句点がないあたり、本人じゃないかとエスパーしてみる。 http://echo.5ch.net/test/read.cgi/gamedev/1036410116/480
481: 名前は開発中のものです。 [んんんんん] 03/11/17 18:51 ID:nHrAdo0+ モンスターの行動ルーチンを作るにはずばりどんな関数を作成すればよいのでしょうか? 【例】FF3 魔王ザンデのケース ターン1 メテオ ターン2 ライブラ ターン3 ほのお ターン4 ライブラ ターン5 地震 ターン6 ライブラ ターン7 メテオ ・・・のループです。 鬼才たる能力を持つこのスレの皆様、どうかお力をお貸しください! http://echo.5ch.net/test/read.cgi/gamedev/1036410116/481
482: 名前は開発中のものです。 [sage] 03/11/17 19:04 ID:Q76r5V+r >>481 モンスターの行動ルーチン以外の部分はどうなってるの? それが分からないと答えようが無いと思うんだが… http://echo.5ch.net/test/read.cgi/gamedev/1036410116/482
483: 名前は開発中のものです。 [sage] 03/11/17 19:19 ID:BhEtARh7 >>481 if(ターン数%7 == 1) メテオ if(ターン数%7 == 2) ライブラ 以下略 ぐらいが簡単でいーんじゃない? http://echo.5ch.net/test/read.cgi/gamedev/1036410116/483
484: 名前は開発中のものです。 [] 03/11/17 19:20 ID:0/Zp/7+M ターン1 メテオ ターン2 ライブラ ターン3 ほのお ターン4 ライブラ ターン5 地震 ターン6 ライブラ ターン7 メテオ ・・・のループです。 それだけなら配列で管理する http://echo.5ch.net/test/read.cgi/gamedev/1036410116/484
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 486 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.023s