0

車 (MouseEvent.MOUSE_DOWN) をクリックすると、車が消え、関数 verlaagLevens() が実行されます。これは機能します(ただし、コメントを入れました)

ここで、クリックイベントの代わりに、自分の船と同じ車の間で hitTestObject を検出したいのですが、うまくいかないようです。これは私の車のクラスです:

package {
import flash.display.*;
import flash.events.*;

public class Car extends MovieClip
{
    //private var hit:uint = 0;
    private var mySpeed:uint = 0;
    private var target:Ship;
    private var stageRef:Stage;
    public static var instance2:Car;

    public function Car(stageRef:Stage, target:Ship) {
        instance2 = this;
        this.x = x;
        this.stageRef = stageRef;
        this.target = target;
        mySpeed = 10;
        addEventListener(Event.ENTER_FRAME, beweeg);
        reset();

    }
    public function reset() {
        if(Main.end_def == 0){
        this.y =0-100/Math.random();
        this.x = Math.random()*(1+300-60)+60;
        }
        //hit = 0;

    }
    public function getroffen() {

        Main.instance.verlaagLevens();
        this.parent.removeChild(this);

    }


    public function beweeg(evt:Event):void {
        if (hitTestObject(target.hit))
        {
            trace("hitTest");
            getroffen();
            reset();
        }
        this.y += mySpeed;
        if (this.y>480) {
            reset();
        }

    }


}

}

そして、これは私のメインクラスです:

package {

    import flash.display.*;
    import flash.display.Stage;
    import flash.events.*;
    import flash.utils.*;

    public class Main extends MovieClip
    {

        private var aantaltegenliggers:uint = 5;
        private var _levens:uint = 3;
        var ourShip:Ship = new Ship(stage);
        public static var instance:Main;
        var car:MovieClip;
        var end = 0;
        public static var end_def:uint;


        public function Main()
        {
            stop();
            instance = this;
        }

        public function initGame():void
        {
            //add it to the display list
            stage.addChild(ourShip);
            ourShip.x = stage.stageWidth / 2;
            ourShip.y = stage.stageHeight / 1.3;

            _levens=3;
            end_def=0;
            teken_levens();


            for (var i:uint=0; i<aantaltegenliggers; i++) 
                {
                    var myTimer:Timer = new Timer(5000, 1);
                    myTimer.start();
                    myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent){


                    if (end==0){
                    car = new Car(stage, ourShip);
                    car.name = "car"+i;
                    //car.addEventListener(Event.ENTER_FRAME,getroffen);
                    car.addEventListener(Event.ENTER_FRAME,gameover);
                    stage.addChild(car);

                    }
                    });


            }

        }
            public function verlaagLevens():void 
            {
                verwijder_een_leven(_levens);
                _levens--;
            }
            // één leven tekenen
            public function teken_een_leven(levenIndex:uint):void 
            {
                var leven:MovieClip = new Leven(); // linkage - export voor Actionscript
                leven.x = levenIndex*35; // positie leven in de x as, 35 pixels opschuiven
                leven.y = 10; // positie leven in de y as
                leven.name = "leven"+levenIndex;
                addChild(leven);    // één leven tonen op het scherm
            }
            // alle levens tekenen
            public function teken_levens():void 
            {
                verwijder_levens(); // verwijder één leven als je de missile niet hebt kunnen raken
                for (var i:uint=1; i<=_levens; i++) 
                {
                    teken_een_leven(i);
                }
            }
            // een leven van het scherm verwijderen
            public function verwijder_een_leven(levenIndex:uint):void 
            {
                if (!(getChildByName("leven"+levenIndex)==null) ) 
                {  // ! is negatie = logische operator
                    removeChild(getChildByName("leven"+levenIndex));
                }
            }
            // alle levens verwijderen
            public function verwijder_levens():void 
            {
                for (var i:uint=1; i<=_levens; i++) 
                {
                    verwijder_een_leven(i);
                }
            }

            public function gameover(evt:Event):void 
            {
                if(_levens==0)
                {   
                    if(end_def == 0){
                    end = 1;
                    stage.removeChild(ourShip);
                    gotoAndStop("gameover");
                    }
                    end_def=1;
                }
            }



    }

}
4

1 に答える 1

1

Car のコンストラクターでヒット テストを実行していますが、これは 1 回だけ呼び出されます。あなたがおそらく望むのは(車が動くので)beggeen関数でフレームごとに衝突をチェックすることです。(これも target.hit が正しいことを前提としています。私はあなたの船にアクセスできないのでわかりませんが、疑いの余地はありません)。

于 2012-06-02T20:47:32.000 に答える