我有当前的代码:
enemyShipTimer = new Timer(2000);
enemyShipTimer.addEventListener("timer", sendEnemy);
enemyShipTimer.start();
如何更改计时器,使其不是每2秒触发一次sendEnemy
,而是在1到3秒之间的随机时间触发?
答案 0 :(得分:3)
Timer
类拥有delay
属性,表示两个“计时器”事件之间的延迟。所以,你只需要在sendEnemy的开头随机改变延迟(对于下一个spawn)。
function sendEnemy(evt:TimerEvent):void {
Timer(evt.currentTarget).delay = (1+Math.random()*2)*1000; // change the delay until the next call.
// continue with the usual sendEnemy code.
}
答案 1 :(得分:1)
在1到3秒之间触发,意味着每秒有33%的机会被触发。所以:
enemyShipTimer = new Timer( 1000 );
enemyShipTimer.addEventListener("timer", function( e:TimerEvent ):void
{
if( Math.random() < 0.33 )
{
trace( "triggered!" );
}
});
enemyShipTimer.start();
答案 2 :(得分:1)
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class Test extends MovieClip {
private var _timer:Timer = null;
public function Test() : void {
addEventListener(Event.ADDED_TO_STAGE, _Init);
}
private function _Init(e:Event) : void {
_RandomTimer();
}
private function _RandomCount() : Number {
var min = 1000;
var max = 2000;
return Math.floor(Math.random() * max + min);
}
private function _RandomTimer() : void {
_timer = new Timer(_RandomCount(), 1);
_timer.addEventListener(TimerEvent.TIMER, _OnTimerCall);
_timer.addEventListener(TimerEvent.TIMER_COMPLETE, _OnTimerEnd);
_timer.start();
}
private function _OnTimerCall(e:TimerEvent) : void {
trace(_timer.delay);
}
private function _OnTimerEnd(e:TimerEvent) : void {
_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, _OnTimerEnd);
_RandomTimer();
}
}
}
答案 3 :(得分:0)
您可以使用Math.random
功能。
您可以通过乘以它来选择随机函数的最大值。
但是你的随机仍然会变为零,所以你必须添加一个起始编号。
var randomNumber:Number = Math.random(); // Number between 0 - 1
randomNumber *= 2000; // Number between 0 - 2000
randomNumber += 1000; // Number between 1000 - 3000
enemyShipTimer = new Timer(randomNumber);
enemyShipTimer.addEventListener("timer", sendEnemy);
enemyShipTimer.start();