ページ 11

質問なのですが

Posted: 2007年11月23日(金) 14:16
by リラン
タイトル画面

プレー画面

ゲームクリア画面

タイトル画面

プレー画面

上のような感じで処理をしたいのですが
ゲームクリア画面からタイトル画面に戻った後に
もう1度プレーすることができません。
変数などの値が初期値に戻っていないせいだと思うのですが・・・
どうすればいいですか?

Re:質問なのですが

Posted: 2007年11月23日(金) 14:33
by バグ
変数を初期化すればいいのではないでしょうか?

Re:質問なのですが

Posted: 2007年11月23日(金) 14:49
by リラン
DXライブラリを使っているのですが
while文の前で初期化しているので
無理なんです・・・

Re:質問なのですが

Posted: 2007年11月23日(金) 14:58
by バグ
DxLib自体の初期化と、ゲームに使う変数の初期化とでは全く意味が違います。
今回の場合は後者ですから、ループの始めで初期化してやれば解決するはずです。

Re:質問なのですが

Posted: 2007年11月23日(金) 15:09
by リラン
while文の中で初期化するということですか?
キャラクターの位置などの初期化は
while文の前でやっているのでできないです。

Re:質問なのですが

Posted: 2007年11月23日(金) 16:10
by バグ
初期化が不可能だという理由が全く分かりません。
まぁ、ソースコードを見ていないので、これ以上は何とも言えませんが…

タイトル画面

プレー画面

ゲームクリア画面

タイトル画面

プレー画面

少なくとも、こういう流れにしたいのならば、タイトル画面とプレイ画面の間で初期化処理をすればいいだけの話だと思いますよ。

提示されている情報だけでは、これ以上のアドバイスは不可能です。

Re:質問なのですが

Posted: 2007年11月23日(金) 16:47
by 管理人
仰る意味はわかりますが、機能の分担をさせていたいため起こる事です。しっかりモジュールわけをしたり、きっちり切り離しが出来る書き方をしましょう。
メインループの中に全部処理をわけずに入れてしまっているからでしょう。
今の状態変数でも用意しておいて、その状態変数によって任意の関数を呼んでやるようにすれば解決します。
そうでなくても、初期化関数をiniとでもするなら、初期化させたいときにini関数を呼んでやるだけのことなので、なんら難しくないと思います。

ゲームプログラミングの館にメイン関数の書き方の例をあげています。
別に一般的なやり方なわけでなく、私の勝手な書き方ですが・・。
メイン関数内には関数の呼び出し以外の記述はなるべくかかないようにし、機能の分担をしっかりさせる事で、切り離しが可能になります。

http://l.huu.cc/g/#34

リンク先でいうならfunction_statesが0の時、初期化させるようにしておけば、初期化させたいとき、function_statesを0にするだけでOKです。

Re:質問なのですが

Posted: 2007年11月24日(土) 10:56
by リラン
返事遅れてすみません。

回答ありがとうございます。

プログラムを書き換えて
実行したところちゃんとできました。

ありがとうございました。