ページ 11

リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 18:17
by Yuno
リプレイを実装しようとを持ったのですが…
いったいどのようにすればいいのか見当もつきません

調べてみたところ、
キーやパッドの入力状態を毎フレームごとに記憶してそれを書き出す
という方法があったのですが
どのようにコードを書けば動くのかわかりません

知ってる人教えてください

一応

VC++で、
ゲームのコードはここのサイトのものがベースです

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 18:22
by Dixq (管理人)
まず、どの辺まで自力で実装出来るのでしょうか?
理屈がわかれば実装出来ますか?

段階的に解決してみましょう。
とりあえず、

1、入力したキーの状態を保存しておく方法
2、上で保存したデータを読み込む方法
3、任意のキーを入力状態にする方法

この辺から考えて今何が解らないのか明確にしてみませんか?

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 18:30
by Yuno
1はできますが
配列の長さがわからないのでどのように宣言すればよいかわかりません

あとデータの保存方法は何とかわかります

読み込みも「セーブデータのロード」のスレを見ればなんとかいけそうです

ですが3はさっぱりわかりません

どうやれば再現できるようになるのか見当もつかないです

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 18:55
by ROM
> どうやれば再現できるようになるのか見当もつかないです

そんなにまでさっぱりならば、リプレイデータの実装をするのはまだ早いんじゃないでしょうか?
それよりも基礎をしっかり学び、自分でも色々とゲームを作ったりして、ゲームプログラムを理解することが結局は早道でしょう。
今までゲームは作ったことあるのでしょうか?
サンプルプログラムのコピーでは物は出来たとしても力は付いていない場合が多いですよ。

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 20:19
by Yuno(Mobile)
すいません
よくみれば再現は簡単でした

しかしそれをどう保存して読み込みすればいいのかわかりません

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 21:00
by Dixq (管理人)
> 配列の長さがわからないのでどのように宣言すればよいかわかりません

mallocは使えますか?
配列の長さは自由に変えられます。
また、読み込み前に大きさを事前に知る方法ももちろんあります。

こんな感じでファイルサイズが取得できます。

fpos_t GetFileSize( const char FileName[/url] ){
fpos_t fsize = 0;
FILE *fp = fopen( FileName, "rb" );
fseek(fp,0,SEEK_END);
fgetpos(fp,&fsize);
fclose(fp);
return fsize;
}

>あとデータの保存方法は何とかわかります
>読み込みも「セーブデータのロード」のスレを見ればなんとかいけそうです

と書いてある後に

>どう保存して読み込みすればいいのかわかりません

と書いてありますが、どっちでしょう?
上の説明でお解りいただけるでしょうか。

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 23:16
by Yuno
fopen( FileName, "rb" );
の部分のファイルの名前がうまく取得できないのですが
ファイルのルートはアプリケーションと同じフォルダ階層から始まっているのでしょうか?

またGetCurrentDirectoryをつかおうとしても変数の型が合いません

どうすればよいでしょうか…?

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 23:24
by Yuno
というより
FileNameに\\replay\\flag.logを渡して
fopen(FileName,"wb");
にするとエラーを喰らうんですが…

Re:リプレイの実装方法がさっぱりです…

Posted: 2010年2月23日(火) 23:38
by array
詳しく読んでいませんが、replayのフォルダを作成していないんだと思います。


# 追記
> ファイルのルートはアプリケーションと同じフォルダ階層から始まっているのでしょうか?

やっぱり読んでいませんでした。
プロジェクタを使って、デバッグなどで実行しているなら、プロジェクトデータがある階層からです。


拡張子が、.sln や .vcproj などがある階層です 画像