2016-05-01 2 views
0

У меня проблема с синхронизацией. Мне нужно, чтобы grape MovieClip до последнего кадра внутри, например, 10 секунд, а затем изменил анимацию, но onComplete срабатывает, после того, как виноград MC достиг 11-го кадра! Есть ли параметр onTimeOut или что-то еще? Я искал везде, пробовал много обходных решений, но ничего не работало отлично, оно либо заканчивает всю анимацию до истечения таймера, либо наоборот.TweenMax frame & onComplete issue

private function changeAnimation():void 
{ 
    if (currentGrapeNumber > 0) 
    { 
     TweenMax.killTweensOf(grapes["Grape" + currentGrapeNumber]); 
     if (currentGrapeNumber == 30) 
     { 
      return; 
     } 
    } 
    currentGrapeNumber++; 
    currentAnimation = TweenMax.to(grapes["Grape" + currentGrapeNumber], minutesPerGrape * 60, { frame:11, onComplete:changeAnimation }); 
} 

EDIT 1: существует переменная currentAnimation, поскольку пользователь может нажать кнопку паузы. Я пытаюсь использовать собственный pausable timer class как обходной путь сейчас, но все же надеюсь, что есть способ, не используя таймеры.

EDIT 2: используется таймер, так как приложение имеет обратный отсчет.

+0

Я не вижу, как твинер участвует в вашем описании. Конечно, вы просто хотите, чтобы таймер запускался каждую секунду, пока не сказали остановиться. Сделайте целые вары типа 'currentSec = 0;' и 'TotalSecs = 10;'. Функция таймера добавляет +1 к 'currentSec' каждый раз, когда срабатывает таймер, а также сообщает grape MC' gotoAndStop (currentSec); '. Имейте 'if'statement, чтобы проверить, совпадают ли оба. Итак, что произойдет, если у вас 10 кадров за 20 секунд? 10/20 = 0,5. Вы не можете перейти к кадру 0.5, но целочисленная часть будет автоматически округлять вниз, так что кадр 1 и 1.5 будут классифицироваться как кадр 1 (удерживание в течение 2 секунд). Просто попробуйте Таймер и посмотрите. –

+0

Tweener через подростки кадров (copypasted линии сверху): 'currentAnimation = TweenMax.to (виноград [ "виноградные" + currentGrapeNumber], minutesPerGrape * 60, {кадров: 11, OnComplete: changeAnimation});' таймер уже задействованный, он уже подсчитывает, TweenMax просто вызывает callComback callback раньше, чем мне нужно, поэтому я спросил, есть ли обратный вызов onTimeOut или что-то в этом роде, проблема решена кстати. –

+0

Хорошо. Я все еще смущен, но, по крайней мере, он решен и работает. –

ответ

0

Проблема решена, я просто добавил это метод updateClock:

private function updateClock(e:TimerEvent):void 
{ 
    secondsToSwitch--; 
    if (secondsToSwitch == 0) 
    { 
     secondsToSwitch = Math.round(minutesPerGrape * 60); 
     changeAnimation(); 
    } 
    /** 
    * Function body 
    */ 
} 

и переменил TweenMax.to() в методе changeAnimation:

currentAnimation = TweenMax.to(grapes["Grape" + currentGrapeNumber], minutesPerGrape * 60, { frame:11 }); 

НО. Если у вас есть альтернатива или какой-то грязный параметр «onTimeOut» в TweenMax - не стесняйтесь публиковать его :)

Смежные вопросы