私のFlashプログラムでは、オブジェクト内で関数を実行しようとしています。このオブジェクトは "SkullDemon.as"というクラスを使用します。私が実行しようとしている機能は "moveSkullDemon();"この関数は "SkullDemon.as"クラス内でコード化されています。Actionscript 3.0オブジェクトのEventListenerを有効にする
私の主なドキュメントクラスは、 "TME2d_Main.as"です。私はこのようなスカル悪魔クラスのインスタンスを作成し、そのファイル内:
public var skullD1b:SkullDemon;
skullD1b = new SkullDemon();
skullD1b.x = 2990.75;
skullD1b.y = 836.95;
skullDemonContainer.addChild(skullD1b);
SkullDemonインスタンスを格納「skullDemonContainer」は、画面に追加されていると呼ばれる別の容器、「envContainer、」内に配置されています次のコード行を使用します。
this.addChild(envContainer);
SkullDemonインスタンスが作成され、画面に表示されます。この問題はSkullDemonクラス内の関数を実行しようとすると発生します。
前述のように、私は 'skullD1b'インスタンスに対して 'SkullDemon.moveSkullDemon()'関数を呼び出そうとします。今のところ、 'moveSkullDemon()'関数はSkullDemonオブジェクトを左に移動するだけです。
SkullDemonのコンストラクタ関数からこの関数を呼び出そうとしましたが、機能しません。実際、SkullDemonのコンストラクタ内に記述されたコードは、Skull Demonオブジェクトが作成されたときには実行されません。私は 'moveSkullDemon()'を呼び出すSkullDemonクラス内にEventListenerを作成しようとしましたが、何もしません。
私は実行するには 'moveSkullDemon()' 関数を取得するには、次の方法を試してみました:
1:このような 'TME2d_Main' から 'moveSkullDemonを()' を呼び出す:
skullD1b.moveSkullDemon();
しかし、この'moveSkullDemon'は関数ではないというエラー(#1006)が発生します。
2:
skullD1b.moveSkullDemon;
3:その "を呼び出し、「skullD1b」例えば「TME2d_Main」内のEventListenerを作成する私は、関数呼び出し内には括弧を持っていないことを除いて第1位と同じことをやってmoveSkullDemon 'function:
skullD1b.addEventListener(Event.ADDED, skullD1b.moveSkullDemon);
これは、「エラー#2007:パラメータリスナーはnullでなくてはなりません」というエラーが表示されます。また、常に「ヌル」参照エラーを検出します。
"1009: Cannot access a property or method of a null object reference.
at classes::TME2d_Main/controlPlayer()"
この問題は、「controlPlayer()」メソッドを意味し、なぜそれがすべてでスカル悪魔のインスタンスを必要としないように私は、知りません。 'controlPlayerは()' 'TME2d_Main' 内にこのコードでイベントリスナーを介して呼び出される:
player.addEventListener(Event.ENTER_FRAME, controlPlayer);
4:移動関数を呼び出す 'SkullDemonContainer' のイベントリスナーを作成する:
skullDemonContainer.addEventListener(Event.ADDED, skullD1b.moveSkullDemon);
これがもたらします#3と同じエラーを起こす。
私は数日間この問題を抱えており、何が原因であるのか分かりません。「moveSkullDemon()」関数内のコードは次のとおりです。
public function moveSkullDemon() {
trace("skull demon moving!");
this.x -= 5;
// If the Player has not hit the 'floor,' increase his falling
//speed
if (! floor.hitTestPoint(this.x, this.y, true)) {
this.y += this.sdGravity;
// The Skull Demon is not on the ground when he's not touching it
sdOnGround = false;
}
// Increase the 'sdYVel' variable so that the Skull Demon will fall
// progressively faster down the screen. This code technically
// runs "all the time" but in reality it only affects the Skull Demon
// when he's off the ground.
sdYVel += sdGravity;
// Increase the Skull Demon's 'y' coordinate by the 'sdYVel' value
if (! sdOnGround) {
this.y += sdYVel;
}
}
ありがとうございました。
私のプロジェクトにパッケージスタイルのシステムを使用する前に、 'SkullDemon.as'のコンストラクタ内で 'moveSkullDemon()'を呼び出すことがうまくいったことに言及しておきます。特定の状況により、私はプロジェクトシステムの使用を余儀なくされました。 –