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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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