Ўсталяваць таймер са выпадковым інтэрвалам

У мяне ёсць бягучы код:

enemyShipTimer = new Timer(2000);
enemyShipTimer.addEventListener("timer", sendEnemy);
enemyShipTimer.start();

Як змяніць таймер так, што замест запуску sendEnemy кожныя 2 секунды, ён запускае яго ў выпадковае час ад 1 да 3 секунд?

0

8 адказы

<�Код> Таймер класа валодаюць затрымкі ўласцівасць, якое паказвае на затрымку паміж двума «таймера» падзей. Такім чынам, вы проста павінны выпадковым чынам змяніць затрымку (для наступнага спавна) у пачатку sendEnemy.

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.
}
3
дададзена

<�Код> Таймер класа валодаюць затрымкі ўласцівасць, якое паказвае на затрымку паміж двума «таймера» падзей. Такім чынам, вы проста павінны выпадковым чынам змяніць затрымку (для наступнага спавна) у пачатку sendEnemy.

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.
}
3
дададзена

Спрацоўванне ад 1 да 3 секунд, азначае, што кожны другі ён мае 33% шанец быць запушчана. Такім чынам:

enemyShipTimer = new Timer( 1000 );
enemyShipTimer.addEventListener("timer", function( e:TimerEvent ):void
{
    if( Math.random() < 0.33 )
    {
        trace( "triggered!" );
    }
});
enemyShipTimer.start();
1
дададзена

Спрацоўванне ад 1 да 3 секунд, азначае, што кожны другі ён мае 33% шанец быць запушчана. Такім чынам:

enemyShipTimer = new Timer( 1000 );
enemyShipTimer.addEventListener("timer", function( e:TimerEvent ):void
{
    if( Math.random() < 0.33 )
    {
        trace( "triggered!" );
    }
});
enemyShipTimer.start();
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();
    }
}
}
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();
    }
}
}
1
дададзена

Вы можаце выкарыстоўваць 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();
0
дададзена
Праблема з гэтым кодам з'яўляецца тое, што ён усё роўна будзе адпраўляць ўсе вораг на той жа інтэрвал. Улічваючы імя функцыі, я думаю, ён хоча іншы інтэрвал паміж кожным ворагам.
дададзена аўтар Aralicia, крыніца

Вы можаце выкарыстоўваць 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();
0
дададзена
Праблема з гэтым кодам з'яўляецца тое, што ён усё роўна будзе адпраўляць ўсе вораг на той жа інтэрвал. Улічваючы імя функцыі, я думаю, ён хоча іншы інтэрвал паміж кожным ворагам.
дададзена аўтар Aralicia, крыніца