0

私のコードを見て、このエラーが発生する理由を教えてください:

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

学んだばかりで、それらを機能させることができなかったため、ドキュメントクラスを使用していません私が始めたチュートリアルは次のとおりです

メインコード:

stop();


import flash.events.Event;
import flash.events.MouseEvent;


var mouseIsDown = false; // mouse isn't held at start
var speed = 0; // no speed at the start
var score = 0; // start with no score!

// check for collisions every frame
addEventListener(Event.ENTER_FRAME, mainLoop);
// add 2 event listeners for the mouse button
stage.addEventListener(MouseEvent.MOUSE_DOWN, clicked);
stage.addEventListener(MouseEvent.MOUSE_UP, unclicked);

// explain the mouse functions
function clicked(m:MouseEvent) {
    mouseIsDown = true;
}

function unclicked(m:MouseEvent) {
    mouseIsDown = false;
}

//// explain the main game loop
function mainLoop(e:Event) {
    // update the score!
    score = score + 10;
    // update the text field
    Output.text = "Score: "+score;
    // move the player based on the mouse button
    if (mouseIsDown) {
        // take something off the speed
        speed -= 2; // accelerate upwards
    } else {
        speed += 2;
    }
    // limit the speed
    if (speed > 10) speed = 10;
    if (speed < -10) speed = -10;
    // move the player based on the speed
    firefly.y += speed;
    // loop through everything on screen
    for (var i = 0; i<numChildren; i++) {
        // check to see if this object is a block
        if (getChildAt(i) is Block || getChildAt(i) is Boundary || getChildAt(i) is Block2 || getChildAt(i) is Arm) {
            var b = getChildAt(i) as MovieClip;
            // this means the object is a block
            // check the block against the player object
            if (b.hitTestObject(firefly)) {
                // make an explosion
                for (var counter = 0; counter<12; counter++) {
                    // make a new Boom object
                    var boom = new Boom();
                    boom.x = firefly.x;
                    boom.y = firefly.y;
                    // randomly rotate boom
                    boom.rotation = Math.random()*360;
                    // randomly scale it
                    boom.scaleX = boom.scaleY = 0.5+Math.random();
                    // add the boom to the world
                    addChild(boom);
                }
                // hide the player
                firefly.visible = false;
                removeEventListener(Event.ENTER_FRAME, mainLoop);

                if(b.hitTestObject(firefly)){
                    nextFrame();
                }
            }
        }
    }
}
4

1 に答える 1

0

ヒントとして、あなたのエラーはupdate()、最初の投稿には含まれていない Arm というクラス / MovieClip 内で呼び出された関数を参照しています。

クラスにコードがなく、すべてが FLA 内にあると仮定すると、Flash IDE の [ライブラリ] パネルで Arm というオブジェクトを探し、それを開き、そこにあるフレーム スクリプト内を調べて、update()関数。

特定のエラーは、まだ作成されていないか存在しないオブジェクトに対してアクションを実行しようとしている (またはそのプロパティを検査しようとしている) ことを意味します。たとえば、Arm シンボル内の名前付きオブジェクトを削除または再ラベル付けした場合、それが update 関数で参照されていると、null オブジェクト エラーが発生します。

コードを見て、まだどのオブジェクトが null か分からない場合は、update 関数の各行の間に次のトレース ステートメントを挿入してみてください。

trace(1);
...
trace(2);
...

これは実行時エラーであるため、Flash はそのエラーが発生するまで各行で指定された番号を追跡し、スレッドをドロップします。出力パネルを見て、どの数値がトレースされているかを確認すると、障害のある行がトレースされた最大数値の直後にあることがわかります。次に、その行の何かが null になる理由を考えることができます。幸運を!

于 2013-04-14T23:24:04.780 に答える