Timer AI不工作

        var moveTimer:Timer = new Timer(1);        moveTimer.addEventListener(TimerEvent.TIMER, timerListener);        function timerListener (e:TimerEvent):void        {            //code        }        moveTimer.start();        moveTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerDone)        function timerDone(e:TimerEvent):void         {            upKey = false;        }

大家好,这是我的代码。我的游戏中有一些非常简单的AI,我试图使用计时器让敌人向前移动大约2-3秒,然后停止。为此,我使用了一个布尔变量upKey,当其为true时,敌人会移动,当计时器结束时,upKey被设置为false,当upKey为false时,有一个if语句会将敌人的速度降为0。

这是我第一次使用计时器,敌人并没有真正停止…它们只是继续移动,直到离开屏幕。我这样做正确吗,还是我的代码中其他地方有问题?另外,有没有更有效的方法来使用计时器?

谢谢,@James。


回答:

从你引用的代码来看,计时器构造函数没有指定repeatCount,这意味着它会无限重复。要调用timerDone()处理程序,你必须指定重复次数。

另外,请注意,低于20毫秒的延迟是不推荐的。

计时器构造函数参数:Timer(delay:Number, repeatCount:int = 0)

delay:Number — 计时器事件之间的延迟,以毫秒为单位。不推荐低于20毫秒的延迟。计时器频率限制为每秒60帧,这意味着低于16.6毫秒的延迟会导致运行时问题。

repeatCount:int (默认值 = 0) — 指定重复次数。如果为零,计时器会无限重复,最多可达24.86天(int.MAX_VALUE + 1)。如果非零,计时器会运行指定次数然后停止。

不推荐使用计时器来处理动画内容。相反,应使用Event.ENTER_FRAME来操控基于帧的动画。

一种方法是使用计时器来触发游戏模型的状态变化:

/** 计时器 */var timer:Timer;/** 敌人是否在前进 */var advance:Boolean = false;// 以5秒为间隔启动计时器timer = new Timer(5000);timer.addEventListener(TimerEvent.TIMER, timerHandler);timer.start();// 通过Event.ENTER_FRAME控制动画addEventListener(Event.ENTER_FRAME, frameHandler);

在你的计时器处理程序中,你可以根据游戏状态调整计时器延迟。

/** 计时器处理程序 */function timerHandler(event:TimerEvent):void{    // 停止当前计时器    timer.stop();    // 根据当前敌人状态    switch (advance)    {        // 如果为true,停止前进并等待5秒        case true:            trace("停止前进,等待5秒");            timer.delay = 5000;            break;        // 如果为false,前进2秒        case false:            trace("前进2秒");            timer.delay = 2000;            break;    }    // 反转advance状态。    advance = !advance;    // 重新启动计时器    timer.start();}

同样,在进入帧时,根据游戏状态控制敌人的动画:

/** 帧处理程序,如果'advance'为true,则前进敌人 */function frameHandler(event:Event):void{    if (advance) { /** 前进敌人 */ }}

这会交替敌人的状态,输出如下:

前进2秒
停止前进,等待5秒
前进2秒
停止前进,等待5秒
前进2秒

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注