Просмотр полной версии : организация задержки перед переходом на следующий кадр
Приветствую
Я использую такой код:
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() - там заморачиваться с очиской не надо.
ок, спасибки
а у него есть какие-нить ограничения?
под чисткой я так понимаю понимается удаление или использование нулевого onEnterFrame?
Molecula
29.11.2007, 22:35
Есть, 8-й версия плеера.
Чистка в смысле, что при запуске setInterval(), для его удаления нужно было юзать clearInterval(), а для setTimeout() такого не надо делать, и работает, вроде лучше.
Я исправил в предыдущем посте функцию.
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();
}
Виснет :(
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")}
Landysh на клавиатуре заснул? (почему столько пробелов в коде)
и какой смысл использовать _currentframe? разве нельзя обойтись одними gotoAndStop(n) / gotoAndPlay(n) ?
ВОВка, смысл такой: если мы остановились на фрейме больше или меньше 5, то полюбому должны туда вернуться(на 5ый фрейм). До вставления туда паузы у меня все работало, но слишком быстро(например перескакивал с 2 фрейма на 5 сразу).
Я только начинаю осваивать AS, поэтому во многом могу ошибаться.
P/S/ - я не засыпала на клаве :)
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-м флэше
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.