as3 выбрасывает объекты наугад - PullRequest
1 голос
/ 30 января 2010

У меня есть код, который сбрасывает первую строку, а затем - сразу после нее. Первый ряд пропадает сразу, а второй - по таймеру.

// Bring in first row
var blueY:Tween = new Tween(blue, "y", Bounce.easeOut, -295, -49, 2, true);
var pinkertonY:Tween = new Tween(pinkerton, "y", Bounce.easeOut, -295, -49, 2, true);
var oddsEndsY:Tween = new Tween(oddsEnds, "y", Bounce.easeOut, -283, -37, 2, true);
var raditudeY:Tween = new Tween(raditude, "y", Bounce.easeOut, -283, -37, 2, true);

// Create and start second row timer
var coverDropTimer:Timer = new Timer(500, 1);
coverDropTimer.addEventListener(TimerEvent.TIMER, dropCovers);
coverDropTimer.start();

// Bring in second row on timer
var greenY:Tween;
var maladroitY:Tween;
var makeBelieveY:Tween;
var redY:Tween;
function dropCovers(e:TimerEvent):void{
    greenY = new Tween(green, "y", Bounce.easeOut, -460, -40, 2.5, true);
    maladroitY = new Tween(maladroit, "y", Bounce.easeOut, -460, -40, 2.5, true);
    makeBelieveY = new Tween(makeBelieve, "y", Bounce.easeOut, -457, -37, 2.5, true);
    redY = new Tween(red, "y", Bounce.easeOut, -457, -37, 2.5, true);
    coverDropTimer.removeEventListener(TimerEvent.TIMER, dropCovers);
}

Как бы я бросил каждую обложку по отдельности в случайном порядке между двумя установленными числами? Я предполагаю, что мне придется применить отдельный таймер для каждого, а затем как-то сделать время, в которое он падает случайным образом между двумя числами?

Не знаю, как это сделать.

Спасибо, Wade

Ответы [ 2 ]

0 голосов
/ 17 февраля 2010

Вот один из способов сделать это:

// Generate the absolute times the covers will drop
// e.g. "Cover 1 will drop 1 second after loading,
// ..Cover 2 will drop 4 seconds after loading, etc."
// MIN_TIME = earliest you want a cover to drop
// MAX_TIME = latest you want a cover to drop
var dropTimes:Array = new Array();
for (var i:int=0; i < numCovers; ++i)
{
    dropTimes.push(Math.random() * (MAX_TIME - MIN_TIME) + MIN_TIME);
}

dropTimes.sort(Array.NUMERIC);

// Convert the times into intervals (how long since the last drop)
for (i = 1; i < numCovers; ++i)
{
    dropTimes[i] = dropTimes[i] - dropTimes[i-1];
}


var coverTweens:Array;

// Insert code here to make an array of cover tweens,
// ..in the order you want them to occur
// If you call myTween.stop() immediately after making a Tween,
// ..it won't play until you call myTween.start() .

var currCover:int = 0;
var coverDropTimer:Timer = new Timer(dropTimes[currCover]);
coverDropTimer.addEventListener(TimerEvent.TIMER, dropNextCover);
coverDropTimer.start();


function dropNextCover(e:TimerEvent):void {
    // Bring the cover in!
    coverTweens[currCover].start();

    ++currCover;

    // Stop if we're at the last cover
    if (currCover >= numCovers) {
        coverDropTimer.stop();
        coverDropTImer.removeEventListener(TimerEvent.TIMER, dropNextCover);
    }
    else {
        // Set the timer for the next cover
        coverDropTimer.delay = dropTimes[currCover];
    }
}
0 голосов
/ 31 января 2010

Я не уверен, что вы имеете в виду в данном контексте под «отбрасыванием», «строкой» и «обложкой», но чтобы сделать 2 события с произвольной синхронизацией между моментами времени T1 и T2, вы могли бы связать таймеры вместе следующим образом:

// Choose random start time between T1 and T2
var deltaT:int=T2-T1;
var startTime:int = T1 + Math.random()*deltaT;

// Choose random interval (some time before T2)
var waitTime:int = Math.random()*(T2-startTime);

// Create and start first event timer
var firstTimer:Timer = new Timer(startTime, 1);
firstTimer.addEventListener(TimerEvent.TIMER, firstEvent);
firstTimer.start();

function firstEvent(e:TimerEvent):void{
 //do stuff...
 // start the second timer
var secondTimer:Timer = new Timer(waitTime, 1);
secondTimer.addEventListener(TimerEvent.TIMER, secondEvent);
secondTimer.start();
}

function secondEvent(e:TimerEvent):void{
 //do more stuff...
}

Это помогает? Или я неправильно понял ваш вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...