フレームマネージャについて
投稿者 : 大月(160.230.192.61.east.flets.alpha-net.ne.jp)
- 2006/07/21(Fri) 00:40
No.10071
|
|
|
|
|
現在特に困っているわけではないのですが確認しておきたいことがあって書き込みします。
フレームマネージャの中ににメンバ変数を定義すると、1フレーム毎に内容が初期化されてしまうように見えるのですが、これはこういう仕様なんでしょうか? ご存じの方がいらっしゃいましたらお教え下さい。
|
Re: フレームマネージャについて
投稿者 : hoge-(133.46.10.95)
- 2006/07/21(Fri) 09:39
No.10072
|
|
|
|
次のように,varで宣言していまうとご報告どおりの現象になります. このaはメンバ変数ではなくてローカル変数です.ローカル変数は,onBeforeMoveが呼び出されるたびに毎回作られて,その回の呼び出しが終了すると消えてしまいます.
function onBeforeMove() { var a; a++; }
Tonyuはvarで宣言されて「いない」変数を自動的にメンバ変数として扱います.次のプログラムにおいてa はメンバ変数になります.
function onStart() { a=0; } function onBeforeMove() { a++; }
|
Re: フレームマネージャについて
投稿者 : 大月(160.230.192.61.east.flets.alpha-net.ne.jp)
- 2006/07/21(Fri) 16:35
No.10075
|
|
|
|
確認してみました。
function onStart() { a=500; } function onBeforeMove() { a++; print( a ); }
結果: ------------------------------- マップを読み込んでいます 実行中です 501 502 1 2 3 4
-------------------------------
毎フレームではないものの、何かのタイミングでやはり0に初期化されてしまうようです。 お手数ですが検証お願いできますでしょうか?
|
Re: フレームマネージャについて
投稿者 : ごま太郎(i222-150-50-219.s02.a002.ap.plala.or.jp)
- 2006/07/22(Sat) 15:40
No.10088
|
|
|
|
てっきり、毎フレーム初期化されると思っていました…。 私の場合は、on系メソッド内ではメソッド外でも参照するメンバー変数を使わないようにしています。グローバル変数と実質的なローカル変数のみということです。 参考になるかどうか分かりませんが、フレームマネージャーにwhile(1){update();}をつけるとオブジェクトとしてページに残るため、メンバー変数が普通に使えます。ただし、on系メソッドでは忘れました^^; ループさせない場合、on系メソッドが実行されますが、オブジェクトとしてはスクリプトがラストまで実行されるのでdie()されて残りません。 このあたりが関係ありそうです。
|
Re: フレームマネージャについて
投稿者 : Umintyu-(tsechttp116.sec.nifty.com)
- 2006/07/22(Sat) 20:42
No.10093
|
|
|
|
自分も確認してみます。
function ondie(){ print("死亡"); } function onStart() { print( "GO!" ); this.a=500; } function onBeforeMove() { print( a ); a++; }
--------結果--------- 実行中です GO! 500 501 死亡 0 1 2 3 4 5 6 (以下略)
どうやらonBeforeMove()を2回実行された後にdie()メソッド呼び出しになるようです。ちなみに最後にwait()を追加したらaはリセットされませんでした。
ちなみにdie()でオブジェクトを破壊するとそのオブジェクトの変数はすべて0にリセットされるようです。
|
Re: フレームマネージャについて
投稿者 : 大月(160.230.192.61.east.flets.alpha-net.ne.jp)
- 2006/07/23(Sun) 04:57
No.10098
|
|
|
|
なるほど、2フレーム目と3フレーム目の間に、フレームマネージャが一度だけ作り直されるような感じなんですね。 よく分かりました。どうもありがとうございました〜。
|
|