首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何增加定时器AS3

如何增加定时器AS3
EN

Stack Overflow用户
提问于 2014-04-06 11:00:18
回答 4查看 485关注 0票数 0

嘿,每个人都不能真正想出解决这个问题的最简单的方法。

基本上,我有一个计时器,在游戏开始时启动,如下所示:

//Create new timer object
        tEggTimer = new Timer (nTimerSpeed);
        //Listen for timer intervals
        tEggTimer.addEventListener(TimerEvent.TIMER, addEggs, false, 0, true);
        //start timer
        tEggTimer.start();

nTimerSpeed等于(800);

然后我像这样添加鸡蛋:

private function addEggs(e:TimerEvent):void 
    {
        //var eggGlobalPosition:Point = _Egg.localToGlobal(new Point(_Bunny.x, _Bunny.y));

        _Egg = new mcEgg();
        stage.addChild(_Egg);
        _Egg.x = _Bunny.x;
        _Egg.y = _Bunny.y + 30;
        aEggArray.push(_Egg);
        trace(aEggArray.length);

    }

因此,在另一个enter frame函数中,我想将计时器的值更改为(500),但每当我尝试这样做时:

tEggTimer =新定时器(500);

tEggTimer.start();

如下所示:

private function updateDifficulty():void 
    {
        if (difficultyUpdate) return;

        if (nScore >= 2)
        { 
            tEggTimer.removeEventListener(TimerEvent.TIMER, addEggs);
            tEggTimer.stop();
            tEggTimer = new Timer(200);
            tEggTimer.addEventListener(TimerEvent.TIMER, addEggs);
            tEggTimer.start();

但这不会做任何事情,只是完全停止计时器。

我该怎么做才能正确地减少计时器?

谢谢你们。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-06 18:46:56

如果您只想更改计时器速度,同时保持其他所有内容不变,则只需更改timer对象中的delay属性即可。

示例如下:

import flash.utils.getTimer;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;

var speeds:Vector.<int> = new <int>[1000, 2000, 5000];
var currentSpeed:int = 0;

var timer:Timer = new Timer(speeds[currentSpeed]);
function timerTick(inputEvent:TimerEvent):void {
    trace("Timer ticking: "+ getTimer());
}
timer.addEventListener(TimerEvent.TIMER, timerTick, false, 0, true);
timer.start();


function clickedStage(inputEvent:MouseEvent):void {
    currentSpeed = ++currentSpeed % speeds.length;
    timer.delay = speeds[currentSpeed];
    trace("Timer delay set to "+ timer.delay);
}
this.stage.addEventListener(MouseEvent.CLICK, clickedStage, false, 0, true);

单击舞台将更改计时器延迟,从1秒、2秒、5秒和周期。我只是使用getTimer()来显示计时器的计时速率。

请注意,从输出来看,每次更改该值时,计时器都会自动重新启动。

票数 1
EN

Stack Overflow用户

发布于 2018-06-19 04:42:18

timer.reset();
timer.delay = 2000;
timer.start();
票数 1
EN

Stack Overflow用户

发布于 2014-04-06 13:38:29

也许不是最好的方法,但是,使用nTimerSpeed,让它每毫秒运行一次:

tEggTimer = new Timer (1);

然后在您的AddEggs函数中使用nTimerSpeed和一个计数器变量。计数器被初始化为0。将你所有的逻辑放在一个if语句中,每次通过函数递增计数器。如果counter等于nTimerSpeed,则允许在if语句中使用它们并重置计数器。

function AddEggs()
{
   if(counter == nTimerSpeed)
   {
       //adding eggs logic
       counter = 0;
   }
   counter++;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22889484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档