2014-09-19 2 views
1

Я работаю над игрой, основанной на нескольких объектах с различным «терпением». Если патентность снизится, сущность умрет. Просто, черт возьми.AS3 TweenMax: Есть ли способ перезаписать продолжительность твинов?

Игрок имеет ограниченные «ускорители», если вы даете эти ускорители объектам, их терпение увеличивается на 5;

public function initTimer (_count) { 
    _count = _count + State.globalPatience; 
    TweenMax.to(filler, _count, // counts back 
      {width: 1 ,ease:Linear.easeNone,  // and display it 
       onComplete : Control.updateLifes, // -1 life 
       onCompleteParams : [this],   // and remove this entity 
      }); 

} 

Эта часть работает нормально. Но я застрял с перезаписывающей частью бустера.

public function updatePatience(_more):void // _more == 5 
{ 
    var current = TweenMax.getTweensOf(loader); 
    trace('add: ' + _more + ' sec to : ' + loader.duration); 

} 

Это следы: «добавить: 5 сек до: неопределенные»

Базовая идея состояла в том, чтобы захватить продолжительность загрузчика, и перезаписать его. Или - убейте текущего Tween и запустите еще один с обновленной продолжительностью. Но похоже, что я даже не могу получить реальную продолжительность текущего Tween.

Я надеюсь, что кто-то может очистить вещь для меня :)

ответ

0

Во-первых, у вас есть какой-то странный код в updatePatience, вы настройки current к TweenMax.getTweensOf(loader), но вы никогда не использовать его. Затем вы пытаетесь получить доступ к свойству duration по адресу loader.

Самый простой способ переписать анимации в greensock является использование overwrite свойство

Из документации:

перезапись: String (или целое число) - Определяет, как (и если) другие подростки одной и той же цели перезаписываются. Есть несколько режимов, чтобы выбрать из, но «авто» по умолчанию

То, что я предлагаю вам сделать это:

TweenMax.to(filler, [your new count], 
      {width: 1 ,ease:Linear.easeNone, 
       onComplete : Control.updateLifes, 
       onCompleteParams : [this], 
       overwrite: "all" 
      }); 

Это будет немедленно обновить анимацию.

Это, как говорится, вы можете доступ к продолжительности анимации:

public function updatePatience(_more):void // _more == 5 
{ 
    var current:Array = TweenMax.getTweensOf(loader); 
    for each(var tween:TweenMax in current) 
    { 
     trace(tween.duration()); 
    } 
} 

Примечания: Вы можете также обновить duration, передавая значение этого метода. Тем не менее, в моем тестировании это приводит к некорректному поведению (пропуску).

+0

Спасибо, работает как шарм :) –

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