「シーンの作り方」の編集履歴(バックアップ)一覧はこちら
「シーンの作り方」(2008/12/01 (月) 20:36:24) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*シーンの作り方
----
**シーンが最低限持つべきメソッド(GameAppから参照されるメソッド)
-コンストラクタ
-init()
-update()
-draw()
-デストラクタ
----
***コンストラクタ
各変数の初期化を行う。できるだけコンストラクタ初期化子を使ってください。
コンストラクタは戻り値をもてないのでエラーが出るような初期化処理はinit()メソッドに任せること。
例.Imageクラスの初期化、
***init()メソッド
・エラーが起こる可能性のある初期化処理、特にImageクラスのload()などを行う場所。
・シーン間で情報をやりとりしたい場合はGameAppが保持しているSceneDataのポインタを引数で持っていってやればいいかも。(任意)、中身は適当に追加していくつもりなので追加したい場合は相談ください。
・bool値を返すこと、falseを返してやるとプログラムが強制終了する。返す直前でメッセージウィンドウを出してやると親切かも。
・特にシーンのリセット機能を考えてる場合、保持しているオブジェクト各自にinitメソッドを持たせてやってreset()から一気にオブジェクトのinitメソッドを呼び出しまくってやれば、リセット機能も簡単に実装できそう。
リセット機能を作る場合、オブジェクトの解放忘れなどに注意してください。
***update()メソッド
1Fに1回呼ばれることが保障されているメソッド。引数で毎回SceneDataのポインタを引っ張って来てるので任意のタイミングでデータの変更が可能です。
戻り値によって次のシーンを決定しているので、シーンを継続したい場合、自分を示すシーン識別子を返し続けてください。
シーンを遷移したい場合はそのシーンの識別子を返すと、勝手にGameAppが現在シーンをデストラクトしてくれます。
情報を保存したりしたい場合は専用のメソッドを作ってupdate()から呼び出してそこで行ってください。(その場合は処理で画面が止まらないように、真っ暗にしてからとか工夫してね)
&bold(){エラーが出る可能性のある処理をデストラクタで行わないでください!!}
異常終了したい場合はEND_SCENEを返してやると即座に終了します。直前でメッセージウィンドウを出してやると親切かも。
***draw()メソッド
描画処理をまとめて書いておいて欲しいメソッド。処理落ちが発生すると&bold(){呼ばれない可能性があります。}
なのでシーン進行に必須な処理はここでは行わないでください。
***デストラクタ
シーンが終了する時に必ず呼ばれることが保障されているメソッド。
必須の解放処理は絶対ここで行ってください。エラーの出る可能性のある解放処理は、なるべくエラーを回避するように書くように心がけてください。デストラクタも戻り値を返さないのでエラーの発生をGameAppが知れる余地がありません。
まぁつまりエラーが出たらおしまいってことだぜ。JAVAのcatchが超欲しい。
**シーンが持つであろうメンバやら
***次フレームのシーン(SceneType m_nextScene;)
初期化子で自分の識別子を入れておく
update()で最後にreturn m_nextScene;するので、途中で変更すればupdateが全て終わった時点でシーン遷移が始まるようにできる。
*シーンの作り方
----
**シーンが最低限持つべきメソッド(GameAppから参照されるメソッド)
-コンストラクタ
-init()
-update()
-draw()
-デストラクタ
----
***コンストラクタ
各変数の初期化を行う。できるだけコンストラクタ初期化子を使ってください。
コンストラクタは戻り値をもてないのでエラーが出るような初期化処理はinit()メソッドに任せること。
例.Imageクラスの初期化、
***init()メソッド
・エラーが起こる可能性のある初期化処理、特にImageクラスのload()などを行う場所。
・シーン間で情報をやりとりしたい場合はGameAppが保持しているSceneDataのポインタを引数で持っていってやればいいかも。(任意)、中身は適当に追加していくつもりなので追加したい場合は相談ください。
・bool値を返すこと、falseを返してやるとプログラムが強制終了する。返す直前でメッセージウィンドウを出してやると親切かも。
・特にシーンのリセット機能を考えてる場合、保持しているオブジェクト各自にinitメソッドを持たせてやってreset()から一気にオブジェクトのinitメソッドを呼び出しまくってやれば、リセット機能も簡単に実装できそう。
リセット機能を作る場合、オブジェクトの解放忘れなどに注意してください。
***update()メソッド
1Fに1回呼ばれることが保障されているメソッド。引数で毎回SceneDataのポインタを引っ張って来てるので任意のタイミングでデータの変更が可能です。
戻り値によって次のシーンを決定しているので、シーンを継続したい場合、自分を示すシーン識別子を返し続けてください。
シーンを遷移したい場合はそのシーンの識別子を返すと、勝手にGameAppが現在シーンをデストラクトしてくれます。
情報を保存したりしたい場合は専用のメソッドを作ってupdate()から呼び出してそこで行ってください。(その場合は処理で画面が止まらないように、真っ暗にしてからとか工夫してね)
&bold(){エラーが出る可能性のある処理をデストラクタで行わないでください!!}
異常終了したい場合はEND_SCENEを返してやると即座に終了します。直前でメッセージウィンドウを出してやると親切かも。
***draw()メソッド
描画処理をまとめて書いておいて欲しいメソッド。処理落ちが発生すると&bold(){呼ばれない可能性があります。}
なのでシーン進行に必須な処理はここでは行わないでください。
***デストラクタ
シーンが終了する時に必ず呼ばれることが保障されているメソッド。
必須の解放処理は絶対ここで行ってください。エラーの出る可能性のある解放処理は、なるべくエラーを回避するように書くように心がけてください。デストラクタも戻り値を返さないのでエラーの発生をGameAppが知れる余地がありません。
まぁつまりエラーが出たらおしまいってことだぜ。JAVAのcatchが超欲しい。
**シーンが持つであろうメンバやら
***次フレームのシーン(SceneType m_nextScene;)
初期化子で自分の識別子を入れておく
update()で最後にreturn m_nextScene;するので、途中で変更すればupdateが全て終わった時点でシーン遷移が始まるようにできる。
**シーンの状態識別子(BattleState m_nowState;)
こいつでswitchすることで状態ごとに処理を変更する。
changeState(BattleState state)で各状態に初期化する。クラス化できる?