1

私はこの問題を抱えており、まったく回避できません

大学向けのプラットフォームゲームを作っています

私は2つのファイルを持っています

flashgame.fla と Coin.as (これは Coin クラスのコードです)

プレーヤーがすべてのコインを収集すると、フレームがフレーム 1 からフレーム 2 に変わることを示すコードがあります。このメッセージを受け取ると、

TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。Coin/update() で TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。flashgame_fla::MainTimeline/loop() で

トライアンドキャッチとかいろいろやってみた

これは、Coin.as が MovieClip を拡張するため、次のフレームに移動するときに、何もないときにまだコインを見つけようとしているためだと思います。

これが Coin.as のコードです


package  {

import flash.display.MovieClip;
import flash.events.*;


public class Coin extends MovieClip {
    var player:MovieClip;
    var mainTimeLine = MovieClip(root);

    public function Coin() {
        this.addEventListener(Event.ENTER_FRAME, update);
    }

    function update(event:Event):void
    {
        player=MovieClip(root).player;
        if(this.hitTestObject(player))
        {
            this.removeEventListener(Event.ENTER_FRAME, update);
            parent.removeChild(this);
            mainTimeLine.coinCount++;
        }

    }
}

}

ゲーム内のすべてのコインを記録する flashgame.fla に配列があります。プレイヤーがそれらをヒットすると、それらは配列から接合されます。フレーム 2 に移動するときにも問題が発生する可能性があります

flashgame.fla の重要な要素


var coin:Array = new Array();
for (i=0; i<numChildren; i++)
{
    if (getChildAt(i) is Coin)
    {
        coin.push(getChildAt(i).getRect(this));
    }
}

スプライシングコイン


for (i=0; i<coin.length; i++)
    {
        if (player.getRect(this).intersects(coin[i]))
        {
            coinSnd.play();
            coin.splice(i,1);
        }
    }

私からさらに何かが必要な場合は、お問い合わせください:)スクリーンショット付きのすべてのg

4

2 に答える 2

0

これは、Coin クラスの update 関数でプレーヤーが見つからないことが原因である可能性があります。これは、表示オブジェクトがステージ上にない場合でも ENTER_FRAME イベントが実行されるためです。これは多くの場合、望ましくありません。この場合、プレイヤーに対してヒットテストを実行しようとします。

これを解決するには、コインがステージに取り付けられるとすぐに更新の実行を開始し、ステージから削除されるとすぐに実行を停止します。

public function Coin() {
   this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
   this.addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage);
}

function onAddedToStage(event:Event):void {
   this.addEventListener(Event.ENTER_FRAME, update);
}

function onRemovedFromStage(event:Event):void {
   this.removeEventListener(Event.ENTER_FRAME, update);
}
于 2012-10-13T13:11:04.310 に答える
0

エラーが発生している行番号は何ですか? これにより、どの変数が null であるかがわかります。

私の推測では、エラーのこの部分に基づいて、「TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。Coin/update() で」というのparentは、コインの が null であるということです。新しいキーフレームに移動し、インスタンスがステージから削除されました。

つまり、次の行でエラーが発生していると思われparent.removeChild(this);ます - これは正しいですか?

その場合は、parent呼び出す前に null でないかどうかを確認removeChildしてください。

于 2012-10-14T02:47:52.443 に答える