Я не пользователь Tween.js ( TweenJS здесь!), Но я подозреваю, что он также используется.
Вы создаете новую анимацию в цикле for на каждой итерации, а не добавляете новые позиции. По сути, это создание нескольких отдельных анимаций, которые запускаются одновременно и работают одновременно, но все они влияют на один и тот же объект. Хороши шансы, что последним твином станет тот, кто подаст заявку.
EDIT
Очевидно, это , как работает Tween.js ? Для анимации можно использовать только один вызов to (). Мое оригинальное решение работает для TweenJS , но не для Tween.js, который использует ваш пример:
ОРИГИНАЛЬНОЕ РЕШЕНИЕ ТОЛЬКО РАБОТАЕТ ДЛЯ CREATEJS / TWEENJS:
Создайте Tween один раз и добавьте вызовы to()
в цикл:
var tween = new createjs.Tween(this.pions.position);
for ( var i = a; i <= index; i++) {
_this.stepByStep(tween, _this.cases[i].position); // Arguments changed!
}
function stepByStep(tween, position)
{
tween.to({
x: position.x,
y: position.y,
z: 5
}, 1000);
}
Это делает одну анимацию движения и добавляет to()
вызовов для каждой позиции. Я также немного упростил аргументы, чтобы сделать функцию немного чище (передача всей области видимости немного грязна). Вы можете очистить его, как хотите.
ОБНОВЛЕННОЕ РЕШЕНИЕ
Используя Tween.js, кажется необходимым создать новую анимацию движения для каждой новой анимации, но вместо того, чтобы создавать их все сразу, вы должны chain
их и запустить только первую анимацию движения.
Вот некоторый псевдокод:
var firstTween = new Tween.Tween(obj)
var earlierTween = firstTween;
(loop) {
var tween = new TWEEN.Tween(obj);
tween.to({params});
earlierTween.chain(tween);
earlierTween = tween;
}
firstTween.start();
Вот быстрая скрипка, которую я бросил вместе. Слой рисования использует EaselJS, но анимация - Tween.js.
https://jsfiddle.net/0mh6kj5y/8/
Я также отметил, что вы ссылались на this.pions
в своей функции, тогда как все остальное использует _this
для области видимости.
Надеюсь, это поможет!