Просмотр полной версии : События Класса Tween
Изучаю Action Script.
Стало необходимо использовать Tween.
На чем пишу: CS3, AS2, Flash8
Фрагмент кода:
import mx.transitions.Tween;
...
class Car {
...
public function Car(parent:MovieClip, car:Array) {
...
_tween = new Tween();
_tween.onMotionFinished = Delegate.create(this, onMotionFinished);
_tween.onMotionStopped = _tween.onMotionFinished;
}
...
private function onMotionFinished() {
_root.instructions_txt.text = "I'm Here!";
trace(_tween);
}
...
Так же в классе есть метод где для _tween собираются настройки, и делается _tween.start();
instructions_txt - это текст который поверх всего выводит дебажную инфу.
Проблема: onMotionFinished не выполняется (I'm Here! не выводится).
Читал статьи про Tween, вроде имена событий написаны без ошибок, но в редакторе, они не подсвечиваются характерным синим цветом.
Как быть?
_tween = new Tween();А где параметры?
но в редакторе, они не подсвечиваются характерным синим цветом.Это внешние классы, и их методы и свойства в список подсветки почему не включены. Но роли это не играет.
Переписал вот так:
import mx.transitions.Tween;
import mx.transitions.easing.*;
import mx.transitions.TweenEvent;
import mx.motion.*;
...
class Car {
...
public function Car(parent:MovieClip, car:Array) {
...
_tween = new Tween();
_tween.addEventListener(TweenEvent.MOTION_FINISH, this.tweenFinished);
}
...
private function tweenFinished(e:TweenEvent) {
_root.instructions_txt.text = "I'm Here!";
trace(_tween);
}
...
Но пишет "The class or interface 'fl.transitions.TweenEvent' could not be loaded." Жалуясь на строку "private function tweenFinished(e:TweenEvent) {"
А где параметры?
Параметры все задаются в другом методе -
public function MoveCar(from:Number, to:Number, speed:Number):Void {
Mask_a = GetPath(from,to);
car_speed = speed?speed:10;
_tween.func = None.easeNone;
_tween.duration = car_speed;
///Другие параметры вычисляются
_tween.obj = ...;
_tween.begin = ...
_tween.finish = ...;
_tween.start();
}
Я создаю один Tween и одним методом меняю ему параметры на мне нужные и стартую.
Зачем? Такой подход рано или поздно приведет к ошибке, если первый твин не отработался, а вы задаете ему новые параметры?
Зачем? Такой подход рано или поздно приведет к ошибке, если первый твин не отработался, а вы задаете ему новые параметры?
За этим мне и нужна эта функция.
private function onMotionFinished() {
_root.instructions_txt.text = "I'm Here!";
trace(_tween);
}
вместо trace всяких я поставлю код который ТОЛЬКО после отработки твина ставит ему новые параметры. Только вот вызывался бы этот метод сначала...
Но пишет "The class or interface 'fl.transitions.TweenEvent' could not be loaded." Жалуясь на строку "private function tweenFinished(e:TweenEvent) {"Не путайте AS2 c AS3
Попробуйте сначала написать классическим способом, то есть задавая параметры в new Tween
И мультипостинг у нас запрещен. Редактируйте последнее ваше сообщение.
Заработало. Но остался один косяк.
Сначала опишу что надо получить в конце - объект (мувик) движется по прямым линиям - поворачивает под прямым углом.
То есть:
- расчитывается начальная и конечная точка прямой
- объект двигается (None.easeNone)
- как только заканчивается движение идет переход в onMotionFinished
- в onMotionFinished расчитывается следующая точка и делается new Tween с новыми настройками
переменная твина объявлена одна - то есть каждый раз new Tween инициализируется в одной переменной.
Проблемы:
1. На "поворотах" все притормаживается. Движение по кривой получается не плавное а с "паузами" в углах
(сделал onMotionFinished, чтобы использовался прежний объект но с другими настройками, а не new Tween - залипать стало меньше, но все равно)
2. Иногда объект не движется, а просто перепрыгивает из начальной точки в конечную - хлоп и все.
UPD: Решил проблему 1 перейдя на Regular.easeInOut - дело в том, что объект - машинка - для нее логично ускоряться, а на поворотах снижать скорость - выглядит естественно. С перепрыгиванием бы теперь решить :(
UPD: Все проблемы решены :)))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.