PDA

Просмотр полной версии : организация задержки перед переходом на следующий кадр


Zhihar
29.11.2007, 21:43
Приветствую
Я использую такой код:


stop();

var nDeltaTimer:Number = 1000;
var nStartTimer:Number = getTimer()

this.onEnterFrame = function()
{
if (getTimer() - nStartTimer > nDeltaTimer)
{
play();
}
}


есть ли что-нибудь более короткое, правильное и менее корявое?

olexandr
29.11.2007, 21:58
да, конечно
setInterval
в хелпе прекраснейший пример по этой команде

Molecula
29.11.2007, 22:24
Я бы посоветовал - setTimeout() - там заморачиваться с очиской не надо.

Zhihar
29.11.2007, 22:29
ок, спасибки
а у него есть какие-нить ограничения?

под чисткой я так понимаю понимается удаление или использование нулевого onEnterFrame?

Molecula
29.11.2007, 22:35
Есть, 8-й версия плеера.
Чистка в смысле, что при запуске setInterval(), для его удаления нужно было юзать clearInterval(), а для setTimeout() такого не надо делать, и работает, вроде лучше.

Я исправил в предыдущем посте функцию.

Zhihar
29.11.2007, 22:58
setTimeout тоже использует clearTimeout

на счет setInterval код должен быть примерно таким:


stop();

var g_nIntervalID:Number;

function PlayFunc()
{
clearInterval(intervalId);
play();

}

g_nIntervalID = setInterval(this, "PlayFunc", 1000);


не скажу что он стал меньше :-) хотя все же понятнее и наверное правильнее

Molecula
30.11.2007, 00:05
Да, но что короче?
var _mt:Number = setTimeout(delayFunc, 2000);
function delayFunc()
{
play();
}

Landysh
30.11.2007, 01:05
Виснет :(

if (this._currentframe > 5)
{
while(this._currentframe > 5)
{

var _mt:Number = setTimeout(delayFunc, 2000);
function delayFunc()
{
play();
this.prevFrame();
}


}

}


if (this._currentframe < 5)
{

while(this._currentframe < 5)
{

var _mt:Number = setTimeout(delayFunc, 2000);
function delayFunc()
{
play();
this.nextFrame();
}

}

}

if (this._currentframe == 5) {gotoAndPlay("start")}

B0Bka
30.11.2007, 01:18
Landysh на клавиатуре заснул? (почему столько пробелов в коде)
и какой смысл использовать _currentframe? разве нельзя обойтись одними gotoAndStop(n) / gotoAndPlay(n) ?

Landysh
30.11.2007, 01:47
ВОВка, смысл такой: если мы остановились на фрейме больше или меньше 5, то полюбому должны туда вернуться(на 5ый фрейм). До вставления туда паузы у меня все работало, но слишком быстро(например перескакивал с 2 фрейма на 5 сразу).

Я только начинаю осваивать AS, поэтому во многом могу ошибаться.

P/S/ - я не засыпала на клаве :)

B0Bka
30.11.2007, 02:55
Landysh сори, не заметил что ты девушка :rolleyes:

я логику не совсем понял, что-то типа этого наверно:

var t_direction:Number = 1; //+1 движение вперед; -1 движение назад

function delayFunc() {
mc.stop();
if (1 == t_direction) mc.nextFrame();
else if (-1 == t_direction) mc.prevFrame();
gotoFrames();
}

function gotoFrames() {
if (mc._currentframe > 5) {
trace(mc._currentframe+" _currentframe > 5");
t_direction = -1;
var _mt:Number = setTimeout(delayFunc, 2000);
}

else if (mc._currentframe < 5) {
trace(mc._currentframe+" _currentframe < 5");
t_direction = 1;
var _mt:Number = setTimeout(delayFunc, 2000);
}

else if (mc._currentframe == 5) {
trace(mc._currentframe+" _currentframe = 5");
mc.gotoAndPlay("start");
t_direction = 1;
var _mt:Number = setTimeout(delayFunc, 2000);
}
}

gotoFrames();

исходник сохранил в 8-м флэше