※ ChatGPTを利用し、要約された質問です(原文:AS3.0 動的に追加したインスタンスについて)
AS3.0で動的に追加したインスタンスについて
このQ&Aのポイント
AS3.0で動的に追加したインスタンスについての質問です。自機にくっついているボールをスペースキーで発射したいのですが、エラーが出てしまいます。
AS3.0で動的に追加したインスタンスを使って、ブロック崩しゲームを作っています。ボールを自機にくっつけた状態からスペースキーで発射できるようにしたいのですが、エラーが出てしまいます。
AS3.0で動的に追加したインスタンスを使ってゲームの開発をしています。ボールは最初は自機にくっついており、スペースキーを押すと自機から離れて発射されるようになっています。しかし、エラーが出てしまうため、問題の解決方法を教えてください。
以下のようなコードで、ブロック崩し的なものを作ろうとしています。
.flaファイルのステージ上には、プレイヤーが操る左右に動く棒状の自機があります。
ボールはステージにあらかじめ配置せずに、コードの中でnew演算子で呼び出して、最初は自機の子要素として自機にくっついており、スペースキーを押すとボールがステージの子要素に変わり、発射されるようにしたいのですが、以下のコードだとエラーになります。
~略~
public class Main extends MovieClip
{
var vx:int;
public function Main():void
{
init();
}
function init():void
{
vx = 0;
var ball:Ball = new Ball(); ←ここについての質問です
player.addChild(ball);
ball.x = 0;
ball.y = 0;
stage.addEventListener('keyDown',onKeyDown);
stage.addEventListener('keyUp',onKeyUp);
stage.addEventListener('enterFrame',onEnterFrame);
}
function onKeyDown(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.LEFT)
{
vx = -5;
}
else if (e.keyCode == Keyboard.RIGHT)
{
vx = 5;
}
else if (e.keyCode == Keyboard.SPACE)
{
stage.addChild(ball); ←この行でエラーが出ます。
ball.x = player.x;
ball.y = player.y;
}
}
~以下略~
この場合、「1120: 未定義のプロパティ ball へのアクセスです。」と、エラーが出てしまいます。
ですが、ボールをステージにあらかじめ配置しておくと、うまくいきます。
子要素を変えなくても作れるとは思うんですが、
あえてそうするなら、new演算子で動的に配置したインスタンスの場合、
どのようなコードを書いたらよいでしょうか?
ご教授お願いします。
お礼
ありがとうございました。 どうやらエラーの原因の目の付け所が間違っていたようです。 インスタンスの変数宣言をinitメソッド内で定義していたので、 インスタンスの入れ物用のball変数がローカルスコープになっていたようです。 メソッドの外で定義し直したらいけました>< また機会がありましたらアドバイスお願いします。