Задержка временной шкалы анимации CreateJS

Я использовал Swiffy для довольно легкого вывода файлов .fla, но потом мне сообщили, что дисплей будет чередовать «мигающий» белый цвет в половине проекта, если просматривать его в ландшафтном режиме на iPad. Очень странное поведение, которое я не смог воспроизвести ни на одном другом устройстве.

Итак, я перешел к попытке использовать CreateJS для решения проблемы. В настоящее время я знаю только JS, чтобы редактировать код, разработанный другими, поэтому до сих пор я был очень неэффективен.

Я зашел так далеко:

/* js
this.stop();
var t=setTimeout(function(){(this.play())}, 1000);
*/

or

/* js
this.stop();
setTimeout(this.play(), 1000);
*/

Мне не удалось заставить анимацию учитывать тайм-аут, и я пробовал МНОГИЕ разные варианты, чтобы попытаться сделать что-то волшебное. Все, что он делает, это немедленно загружает следующий кадр, он вообще не делает паузы. Где я ошибаюсь?

Вот оригинальный ActionScript:

stop();

var shortTimer:Timer=new Timer(1000); 
shortTimer.addEventListener(TimerEvent.TIMER, timerN1); 
shortTimer.start(); 


function timerN1(e:TimerEvent):void{ 
    play(); 
    shortTimer.reset(); 
}

Любая помощь будет очень признательна, так как я ничего не добился, пытаясь исправить это самостоятельно, в свободное время в течение нескольких недель, и мой клиент становится все более злым. Скорее дизайнер, но еще очень необразованный в плане программирования. Опять же, даже предложение было бы очень полезно на этом этапе. Кажется, я не могу его взломать.


person Todd    schedule 06.03.2013    source источник


Ответы (3)


Этот синтаксис более правильный:


/* js
this.stop();
var t=setTimeout(function(){(this.play())}, 1000);
*/

Однако вы можете обнаружить, что "это" - это Window, а не вызывающий его MovieClip. Вы можете обойти это, используя локальную ссылку (в данном случае это «_this»).


/* js
this.stop();
var _this = this;
var t=setTimeout(function(){
    console.log(this, _this);
    _this.play();
}, 1000);
*/

Вы можете проверить это, взглянув на свою консоль и увидев разницу между "this" и "_this".

Ваше здоровье.

person Lanny    schedule 07.03.2013
comment
Это сработало! Большое спасибо! Одно редактирование, однако, вы пропустили n в функции. ВАШЕ ЗДОРОВЬЕ! - person Todd; 07.03.2013

Не могли бы вы опубликовать больше кода, с которым вы работаете? Вы пытались использовать функцию onAnimationEnd:

var _this = this;

_this.onAnimationEnd = function() {
    _this.stop();
    setTimeout(function(){
       _this.play();
    }, 1000)
}
person eivers88    schedule 07.03.2013
comment
Я не мог заставить это работать, возможно, потому, что у меня нет ничего с именем анимация? Спасибо за ваш вклад! - person Todd; 07.03.2013
comment
Что ж, я мог бы помочь больше, если бы увидел больше вашего кода (javascript, создающий анимацию). Я использую CreateJS довольно часто - person eivers88; 07.03.2013
comment
У этого та же проблема, что и у оригинала, где область действия функции была скомпрометирована. - person Lanny; 07.03.2013

Попробуйте это, чтобы сохранить вашу область действия внутри вашей функции setTimeout:

sprite.on('animationend', function(event) {
    event.target.stop();
    setTimeout(animationend.bind(event.target), 1000);
});

function animationend() {
    this.gotoAndPlay('run');
}

С помощью .bind() вы можете передать объект в качестве области действия вызываемой функции. Дополнительная информация здесь.

person Herzuull    schedule 03.10.2016