无法停止产生敌人

时间:2014-11-17 06:40:07

标签: actionscript-3 flash

好的,这就是故事。

以下代码是我用来在恐怖游戏中定期产生单个敌人的代码。他每隔10秒钟就会在窗口产生一次,然后每隔6秒就进入房间,他已经进入房间,你已经死了,因为5秒后你会得到一个可爱的跳跃比赛。敌人从窗户转移到卧室的那一刻是我希望窗户敌人停止产卵的时刻。

EnemyShipTimer是产生敌人的计时器。

enemyTimer是计算敌人在多长时间内的计时器    窗户,然后在房间里。

在主文件中,我试图以多种方式摆脱敌人,没有效果。

所以function gtfo是我最近尝试通过尝试从类文件本身停止产生来消除敌人的尝试。它仍然没有奏效。也许我需要以某种方式从我的游戏中删除类文件,但我不知道如何。请帮忙! ; A;

PS,countClick计算你为使敌人消失而做了多少次点击,虽然当我让他离开时,房间的敌人仍然会产生:c

package 
{

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.utils.getTimer;
import flash.events.TimerEvent;
import flash.text.TextField;

public class EnemyShip extends MovieClip

{
    private var clickCount:int = 0;
    private var enemyShipTimer:Timer;
    private var enemyTimer:Timer;



    public function EnemyShip()
    {

        this.x = 900;
        this.y = 214;

        addEventListener(MouseEvent.CLICK, addClick);
        addEventListener(MouseEvent.CLICK, countclick);
        addEventListener(TimerEvent.TIMER, gtfo);

    }



    function gtfo(e:TimerEvent):void{
        if (enemyTimer.currentCount==5)
        enemyShipTimer.stop();
        stage.removeChild(this);
    }

    function addClick(event:MouseEvent):void
    {
        clickCount = clickCount + 1;
        trace("Clickage : " + clickCount);

    }


    function countclick(event:MouseEvent):void
    {

        if (clickCount ==4)
        {
            stage.removeChild(this);

        }
    }

}

}

以下是可能与代码冲突的相关主时间轴代码(我根据@Karma的有用说明更新了包类c:虽然敌人仍在生成;我认为现在的问题是计时器函数与我在主时间轴中放置的计时器函数冲突,我试图将它们移动到包类中,但我不知道如何添加必要的动画片段以便我不会得到访问未定义的属性错误,所以我再次将两者分开

enemy是产生敌人的窗口。

mosnta是产生敌人的房间。

sod是死亡的屏幕(屏幕上的游戏)根本不播放。

var enemyShipTimer:Timer;

function sendEnemy(e:Event)
{

var enemy = new EnemyShip();
stage.addChild(enemy);
var enemytimer = new Timer (1000, count);
enemytimer.start();
enemyShipTimer = new Timer(10000);
enemyShipTimer.addEventListener("timer", sendEnemy);
enemyShipTimer.start();

enemytimer.addEventListener(TimerEvent.TIMER, countdowndesu);
function countdowndesu(e:Event):void{
if (enemytimer.currentCount>5){
    trace("ur ded");
    enemytimer.removeEventListener(TimerEvent.TIMER, countdowndesu);
    mosnta.visible=true;
    enemy.visible=false;


if (enemytimer.currentCount==8){
    sod.visible=true;
    sod.gotoAndPlay(2);
}



}
}
}

1 个答案:

答案 0 :(得分:0)

并不是真正了解游戏运作方式的动态,但这里有一个工作计时器的代码更改版本。也许这会帮助您弄清楚如何解决问题

package 
{    
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class EnemyShip extends MovieClip    
    {
        private var clickCount:int = 0;
        private var enemyShipTimer:Timer;
        private var enemyTimer:Timer;

        public function EnemyShip()
        {        
            this.x = 900;
            this.y = 214;

            //only need one click handler
            addEventListener(MouseEvent.CLICK, addClick);

            //Instantiate Timers
            enemyShipTimer = new Timer(10000); //10 seconds
            enemyTimer = new Timer(6000); //6 seconds

            //add TimerEvent listeners onto Timer Objects
            enemyShipTimer.addEventListener(TimerEvent.TIMER, gtfo);
            enemyTimer.addEventListener(TimerEvent.TIMER, enemyTimerHandler);

            //Start the timers
            enemyShipTimer.start();
            enemyTimer.start();
        }       

        //This gets called every 10 seconds
        private function gtfo(e:TimerEvent):void
        {
            trace("enemy spawns at window");
            if (enemyTimer.currentCount == 5) {
                 enemyShipTimer.stop();
                 stage.removeChild(this);
            }
        }

        //This gets called every 6 seconds
        private function enemyTimerHandler(e:TimerEvent):void
        {
            trace("enemy moves to room");
        }

        private function addClick(event:MouseEvent):void
        {
            clickCount ++;
            trace("Clickage : " + clickCount);
            if (clickCount == 4)
            {
                stage.removeChild(this);

            }    
        }    
    }
}