トップページgamedev
981コメント424KB

ゲームプログラミング相談室【Part6】

レス数が950を超えています。1000を超えると書き込みができなくなります。
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
0951名前は開発中のものです。2006/03/07(火) 21:40:39ID:FUu2poXA
俺のよりスマート。
0952名前は開発中のものです。2006/03/07(火) 21:58:02ID:BkDgmlhw
いやfgetcとかforとfscanfを組み合わせてるんだけどどうしても分岐が出てくるしこれは見てて嫌だなって
0953名前は開発中のものです。2006/03/07(火) 22:01:07ID:P11agiDo
バイナリにしちゃえば?
0954名前は開発中のものです。2006/03/07(火) 22:14:57ID:FUu2poXA
それだ
で次スレ
0955名前は開発中のものです。2006/03/07(火) 22:58:17ID:BkDgmlhw
>>953
早速やってみた
変換ツール作りの段階でコンパイラにコンパイルエラー連射されると困る
0956名前は開発中のものです。2006/03/08(水) 01:38:07ID:FOxUDukT
テキストファイルをバイナリに変換するのと
バイナリをテキストに変換するのを作るのに2時間かかった
マップ以前に今後について考える必要があるかも
0957名前は開発中のものです。2006/03/08(水) 09:37:07ID:cf7g5b6+
そういうツールをちゃちゃっと作るならスクリプト言語が楽でいいぞ。
例えばperlで>>948のCSVをバイナリ化するならこう書ける。

open(IN, 'map.txt');
while (<IN>) {
 chomp($_);
 my @linedata = split(/,/, $_);
 foreach my $data (@linedata) {
  $out .= pack("s", int($data));
 }
}
close(IN);
open(OUT, '>map.dat');
binmode OUT;
print OUT $out;
close(OUT);
0958名前は開発中のものです。2006/03/08(水) 10:00:00ID:FOxUDukT
>>957
短いなぁ
ちょっとそっち関連の勉強でもしてみる
0959名前は開発中のものです。2006/03/08(水) 22:10:22ID:/wiAUAS3
そして、とうとう彼はスクリプト世界から帰ってきませんでした。
0960名前は開発中のものです。2006/03/10(金) 23:11:01ID:eoGMdw8P
ttp://dream.my-sv.net/upload/src/up0144.zip
タスク構築していろいろやってみたんだけど、デバッグ中にタスク削除辺りでエラーが出る
WinMain.cpp - エントリ。タスクやキャラクラスの宣言
CTask.cpp - タスクシステム
CChar.cpp - キャラクラス。タスククラスを継承。全キャラクタの継承元クラス。
CUser.cpp - 自キャラ管理。爆発クラスの呼び出し。 キャラクラス派生
CExplosion.cpp - 爆発クラス。一定時間経過で開放。
CRenderer.cpp - DirectX
ChipPoint.h - テクスチャ座標配列

クラスCUserがカーソルキーによる移動時に一定間隔でCExplosionをnewしてタスクリストに追加、
CExplosionが一定フレーム爆発し続ければメンバ関数Proc内で
CTask::TaskKill(TASK* t)にthisポインタ渡して開放待ち状態に移行
TaskKill内では渡されたタスクのタスク用デストラクタを実行してそのタスクのStatusメンバにステータス列挙体のSTATUS_KILLを詰め込む
その後にCTask::TaskExecution()を実行してTASK_KILLのタスクをCTask::TaskDelete(TASK* t)に渡して開放したいんだけど、
そのTaskExecution()内のswitch文でTASK::Statusを参照するとエラーが出る

長々長々とスマソ。ソースは「とりあえずやってみっか」的でかなり雑
0961名前は開発中のものです。2006/03/10(金) 23:25:25ID:0u3ISKgK
>960
で、何だ?
「暇人の皆さん、このとりあえずやってみっか的ソースをデバッグしやがれ。」
って事か?
0962名前は開発中のものです。2006/03/10(金) 23:51:07ID:6klj+UjH
>>960
ソースを上げるスレッド
ttp://pc8.2ch.net/test/read.cgi/gamedev/1005038280/
0963名前は開発中のものです。2006/03/11(土) 00:34:44ID:fYcMiC+y
>>960
(1)(2)(3)の順に読んでね、お兄ちゃん。

for(TASK* i=Top->Next; i!=End; i=i->Next)  ← (2) 次のi->Nextは開放後の不定値になり
{
(中略)
  switch(i->Status)   ← (3) そして、どかーん☆
  {
    case STATUS_KILL:
      TaskDelete(i);    ←(1) ここでiの実体を開放した場合、
      break;
  };
}
09649602006/03/11(土) 00:49:40ID:ojp9Bp1N
>>961-962
すまんかった。

>>963
おお、なるほど
オブジェクト側で何かやらかしてるのかと思ってたから
タスク実行ループは疑いもしなかった
実行できました。ありがとうございます
0965名前は開発中のものです。2006/03/11(土) 01:09:54ID:xs4HFJgg
いいなあ、ロリロリの妹に手取り足取り教えてもらえて
0966名前は開発中のものです。2006/03/11(土) 03:07:50ID:CNVjlctO
ソースレビューはする方もされる方も勉強になるかと。
0967名前は開発中のものです。2006/03/11(土) 04:58:54ID:HaVUH+Mi
なんでもかんでもタスクタスクって、あなた達はVOWのファンなのですか?
0968名前は開発中のものです。2006/03/11(土) 05:18:19ID:HaVUH+Mi
ゲームのデータ(マップやキャラクタのデータなど)の構造変更時に旧ファイルとの互換性を楽にもたせられる方法はありませんか?

例えば
class map_data
{
public:
BYTE chip_x,chip_y;//チップのインデックス
};
というクラスがあり、これをそのままサイズ分ファイルに書き込みます。
このクラスはマップファイル用に使われるので実際はマップの編集作業に大変時間を取られます。

しかし、このクラスに何かの変数を追加する必要が生じまして
class map_data
{
public:
BYTE chip_x,chip_y;//チップのインデックス
char flag[4];//
};
こうなったとすると、クラスのサイズの違いから読み込み位置にズレが生じてしまい、
前回頑張って作ったマップのデータが意味の無いものになってしまいます。
これを回避するために上手い方法は無いでしょうか。
今はファイル読み込み関数を旧式、書き込み関数だけを新しいものにして、
一旦新形式でセーブしてから読み込み関数を新形式にする方法と、
あらかじめchar reserved[1000]という余分なスペースを確保し、
追加分の変数のサイズだけ引いていくという方法でやっていますが面倒です。
0969名前は開発中のものです。2006/03/11(土) 08:29:22ID:r0/M++6p
バージョンでも持てばいいじゃん
0970名前は開発中のものです。2006/03/11(土) 08:37:41ID:/5hGWtyv
答えてやった奴にはお礼にエロ画像でも見せてやれよ
0971名前は開発中のものです。2006/03/11(土) 09:11:12ID:czh0rJIG
>>968 まずは次スレを建てるといいよ。
0972名前は開発中のものです。2006/03/11(土) 13:21:52ID:3b41TJWI
次スレ
http://live19.2ch.net/test/read.cgi/ogame/1142050870/
0973名前は開発中のものです。2006/03/11(土) 14:29:54ID:OQA38ARh
オフセットじゃなくて名前でそれぞれのパラメタを取れるようにしたらどーなのよ?
プロパティシート?プロパティテーブル?プロパティセット?そんな感じのやつ。
それができないようなデータならreservedを設けるしかないな!
0974名前は開発中のものです。2006/03/11(土) 15:30:10ID:CNVjlctO
チャンク使って、データ単位で分類わけするべし。
いま時だとXMLとかでもいいかもしれず。
0975名前は開発中のものです。2006/03/12(日) 02:10:41ID:v/iGtfpN
次スレ:http://pc8.2ch.net/test/read.cgi/gamedev/1142096974/
0976名前は開発中のものです。2006/03/12(日) 10:32:49ID:9Xx2pFM6
おつ〜♪
0977名前は開発中のものです。2006/03/12(日) 10:37:21ID:bZfGY06E
じゃぁ、埋めです。

MMOFPSで常時一万オーバー接続で快適に稼動させるには、
どのあたりから手をつけr
0978名前は開発中のものです。2006/03/12(日) 10:53:06ID:FjM9fEPE
まずはIPv6が標準プロトコルになるまで待つ。
0979名前は開発中のものです。2006/03/12(日) 11:07:49ID:bZfGY06E
迅速なレスありがとうございます。

>まずはIPv6が標準プロトコルになるまで待つ。
では、その日を夢見てゲ製をサボリ、マターリ惰眠を貪ろうかと思います。
本当にありがとうございました。
0980名前は開発中のものです。2006/03/12(日) 13:28:50ID:zIFbhKP6
>>978
IPv6になれば速度上がるの?
0981名前は開発中のものです。2006/03/12(日) 16:22:43ID:1FvRGjG/
効率悪いところは改善されてると思われる。
IPv6が標準になるころには光接続も標準になるだろうし、1万人で遊ぶのも
なんとかなりそうな気ガス。

10年後くらいか。
レス数が950を超えています。1000を超えると書き込みができなくなります。