0

だから、基本的に私はhitTestingでこの問題を抱えています.私が行ったすべてのAS3で、私はこのエラーに遭遇したことはありません.私はドラッグアンドドロップで作業しています.非常に簡単です。混乱してエラーが発生するコードは次のとおりです。

    if(coin3.hitTestObject(wallet1)) {
coins +=1;
coin3.x -=7000;
}

したがって、このエラーは本当に私を悩ませています。修正する必要があります。ゲームが破壊されています! オブジェクトを変数またはデータ型に割り当てていません。単純に、これを修正するにはどうすればよいですか? ヌルが何かわかりません!コード全体は次のとおりです。

import flash.events.Event;
import flash.events.MouseEvent;
var coins:Number = 0;
var maxcoins:Number = 3;
coin2.addEventListener(MouseEvent.MOUSE_DOWN, coin2drag);
function coin2drag(e:MouseEvent)
{
    coin2.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, coin2undrag);
function coin2undrag(e:MouseEvent)
{
    coin2.stopDrag();
}

coin3.addEventListener(MouseEvent.MOUSE_DOWN, coin3drag);
function coin3drag(e:MouseEvent)
{
    coin3.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, coin3undrag);
function coin3undrag(e:MouseEvent)
{
    coin3.stopDrag();
}
coin4.addEventListener(MouseEvent.MOUSE_DOWN, coin4drag);
function coin4drag(e:MouseEvent)
{
    coin4.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, coin3undrag);
function coin4undrag(e:MouseEvent)
{
    coin4.stopDrag();
}

coin2.addEventListener(Event.ENTER_FRAME, coin2hit);
function coin2hit(e:Event)
{
    if (coin2.hitTestObject(wallet1))
    {
        coins +=  1;
        coin2.x +=  700000;
    }
    if (coins == maxcoins)
    {
        gotoAndStop(54);
    }
}


coin3.addEventListener(Event.ENTER_FRAME, coin3hit);
function coin3hit(e:Event)
{
    if (coin3.hitTestObject(wallet1))
    {

        coins +=  1;
        coin3.x +=  700000;
    }
};


coin4.addEventListener(Event.ENTER_FRAME, coin4hit);
function coin4hit(e:Event)
{
    if (coin4.hitTestObject(wallet1))

    {
        coins +=  1;
        coin4.x +=  700000;
    }
};
4

3 に答える 3

0

このエラーは、アクセスしようとしているオブジェクトが存在しないことを意味します。この場合は、使用する前に、coin3、wallet1、または coins 変数が適切に作成 (初期化) されていないことを意味します。

Coin3 と wallet1 がムービークリップの実際の名前であり、実際にステージ上にあることを確認し、コインを使用する前に少なくとも 1 回は任意の値に設定されていることを確認してください (コイン = 0;); など)。

于 2012-10-10T21:04:05.363 に答える
0

オブジェクトをコードで厳密にインスタンス化する場合は、オブジェクトを適切に分類し、それに応じて変数に名前を付けていることを確認してください...つまり:

var coin3:Coin = new Coin;

ここで、「coin3」はクラス「Coin」のインスタンスです...オブジェクトで何をするつもりかによって、次のことが必要になる場合があります。

addChild(coin3);
//this may sit inside a function, or directly after the var is created, depending on what you're trying to do

それ以外の場合は、ステージ上に既に物理的に配置されているオブジェクトを呼び出す場合は、呼び出しているオブジェクトのインスタンス名があることを確認してください。これは、プロパティ ウィンドウ ペインで設定されます。MCに「coin3」(または何でも)というタイトルを付けただけでは、それはできません。

ただし、コードを詳しく見ないと、何が起こっているのかを知るのは困難です。クラス構造の概念が新しい場合は、AS3 などのオブジェクト指向言語でオブジェクトを適切に作成および管理するために不可欠であるため、そのしくみについてよく読んでおく必要があります。

于 2012-10-10T21:20:31.037 に答える
0

これで始められるかもしれません... 配列がどのように機能するかを読んで、オブジェクトのカウントと管理の方法をよりよく理解してください。これは、実際にやろうとしていることに対して理想的である場合とそうでない場合がありますが、それらを使用してかなり気の利いたことを行うことができます...また、ドラッグ関数の1つを誤って参照しました。少し整理しやすいように整理しました。

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

var coins:Array();
//this creates an empty array

var maxcoins:int= 3;

coin2.addEventListener(MouseEvent.MOUSE_DOWN, drag);
coin2.addEventListener(MouseEvent.MOUSE_UP, undrag);
coin3.addEventListener(MouseEvent.MOUSE_DOWN, drag);
coin3.addEventListener(MouseEvent.MOUSE_UP, undrag);
coin4.addEventListener(MouseEvent.MOUSE_DOWN, drag);
coin4.addEventListener(MouseEvent.MOUSE_UP, undrag);

// if only dragging one object at a time, then you can just put all your drags into two     functions

function drag(e:MouseEvent)
{
coin2.startDrag();
coin3.startDrag();
coin4.startDrag();
}

function undrag(e:MouseEvent)
{
coin2.stopDrag();
coin3.stopDrag();
coin4.stopDrag();
}

/////////////////////////////////////////////////////////////////

coin2.addEventListener(Event.ENTER_FRAME, coin2hit);
function coin2hit(e:Event)
{
if (coin2.hitTestObject(wallet1))
{
    coins.push(coin2);
//this pushes the coin into the Array which will continue count until it is     cleared below ////

coin2.visible=false;
//setting coin2 to not be visible is simpler than moving it away, especially if the object is never being added again on stage. 
}

if (coins == maxcoins) // mind you this conditional will ONLY execute if coin2hit() is run.
{
    gotoAndStop(54);

    coins.pop(); //this clears the array ////
}
}


coin3.addEventListener(Event.ENTER_FRAME, coin3hit);
function coin3hit(e:Event)
{
if (coin3.hitTestObject(wallet1))
{

    coins.push(coin3);
    coin3.visible=false;
}
};


coin4.addEventListener(Event.ENTER_FRAME, coin4hit);
function coin4hit(e:Event)
{
if (coin4.hitTestObject(wallet1))

{
    coins.push(coin4);
    coin4.visible=false;
}
};
于 2012-10-10T21:58:19.353 に答える