■現象
攻撃ボタンを押すと、武器のMCを呼び出して表示。
武器MCには、飛んでいく方向とスピード用の変数を記述。
var speed_x:Number = 0;
var speed_y:Number = 0;
この変数を、武器の座標に加減算して武器を飛ばす処理をしている。
this.x += speed_x;
this.y += speed_y;
移動方向は毎回違うので、MCを呼び出した際に mc.speed_x=20 と親側から設定したのですが、
speed_xは0のままであり、MCは移動せず。
■対応
var speed_x:Number;
var speed_y:Number;
と初期値を代入しなければ親側から代入したmc.speed_x=20が有効となりMCが移動。
良く分からないが、呼び出しと同時に値を代入する変数は初期化してはダメという事?
(後日追記)
入れ子MCの処理タイミングの問題でした。
ASの処理順序は親→子の順で実行されます。
親が呼び出しと同時に子の変数を操作しても、子のターンになると子の側で設定している初期化が改めて行われるのでこのような現象が起こります。
かなり初歩的な知識なのに今まで気付かなかった・・
(後日追記ここまで)
■現象2
上記の続き。
var speed_x:Number;
var speed_y:Number;
と初期値を設定せず、MCを呼び出した際に
mc.speed_x=20と代入。
Y方向は不要だったので、speed_yの代入を省略してしまったら
出現Y座標が0で固定されてしまった。
■対応2
speed_yへの値代入を省略してしまうと、speed_yの値はNaN状態なので普通に考えてダメ。
という事でmc.speed_y=0;とspeed_yの値もちゃんと代入してやればOK。
しかし上記の不具合の影響で、何故出現Y座標が0になるのかは謎です。
中々難しい世界です。
2011年01月10日
2011年01月06日
TypeError: Error #1009 同じ名前のテキストフィールド
■エラーメッセージ
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
■原因
4フレームを通して共有しているテキストフィールドが存在。
フレーム間を移動したり、各フレーム上のボタン等をクリックするとテキストフィールドにメッセージが表示されるはずであったが、途中から上記のようなエラー。
色々調べた結果、とあるフレームの別レイヤーに同じ名前のテキストフィールドが存在していた。
■対応
不要な方を消したら解決
同じ名前でも、パブリッシュ時にエラーとはならないんですね。
.
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
■原因
4フレームを通して共有しているテキストフィールドが存在。
フレーム間を移動したり、各フレーム上のボタン等をクリックするとテキストフィールドにメッセージが表示されるはずであったが、途中から上記のようなエラー。
色々調べた結果、とあるフレームの別レイヤーに同じ名前のテキストフィールドが存在していた。
■対応
不要な方を消したら解決
同じ名前でも、パブリッシュ時にエラーとはならないんですね。
.
2010年12月24日
TypeError: Error #1009 2回削除されて・・
■エラーメッセージ
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
■原因
1.自機ショットを配列に格納
2.敵MC側で自機ショットとの当り判定をforで取る。
3.接触していれば該当するショットを削除。
4.自分(敵)を削除する関数を実行して自分も消える。
上記の処理で4番が2回処理される事があった。
弾の間隔が短い時(同時に敵に接触するような)時に良く発生。
3回処理される事は無い模様。
どうも自分(敵)を削除する関数を呼び出している間に、もう一回分ループ処理を行っている模様である。
よって、次の弾との当り判定も行われ、削除の関数がもう一度呼び出される。
1回目の削除関数でaddChild()されているので、2回目の削除の際に親MCがnullである。
エラー。
■対応
当り判定のループで、余分にループしないように
自分削除関数を呼び出した直後にbreakで抜けておくとエラーは発生しなくなった。
むずい・・・
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
■原因
1.自機ショットを配列に格納
2.敵MC側で自機ショットとの当り判定をforで取る。
3.接触していれば該当するショットを削除。
4.自分(敵)を削除する関数を実行して自分も消える。
上記の処理で4番が2回処理される事があった。
弾の間隔が短い時(同時に敵に接触するような)時に良く発生。
3回処理される事は無い模様。
どうも自分(敵)を削除する関数を呼び出している間に、もう一回分ループ処理を行っている模様である。
よって、次の弾との当り判定も行われ、削除の関数がもう一度呼び出される。
1回目の削除関数でaddChild()されているので、2回目の削除の際に親MCがnullである。
エラー。
■対応
当り判定のループで、余分にループしないように
自分削除関数を呼び出した直後にbreakで抜けておくとエラーは発生しなくなった。
むずい・・・

