PDA

Просмотр полной версии : События Класса Tween


ekeeper
13.06.2008, 17:03
Изучаю 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, вроде имена событий написаны без ошибок, но в редакторе, они не подсвечиваются характерным синим цветом.
Как быть?

iNils
13.06.2008, 17:11
_tween = new Tween();А где параметры?
но в редакторе, они не подсвечиваются характерным синим цветом.Это внешние классы, и их методы и свойства в список подсветки почему не включены. Но роли это не играет.

ekeeper
13.06.2008, 17:12
Переписал вот так:

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 и одним методом меняю ему параметры на мне нужные и стартую.

iNils
13.06.2008, 17:21
Зачем? Такой подход рано или поздно приведет к ошибке, если первый твин не отработался, а вы задаете ему новые параметры?

ekeeper
13.06.2008, 17:26
Зачем? Такой подход рано или поздно приведет к ошибке, если первый твин не отработался, а вы задаете ему новые параметры?

За этим мне и нужна эта функция.


private function onMotionFinished() {
_root.instructions_txt.text = "I'm Here!";
trace(_tween);
}


вместо trace всяких я поставлю код который ТОЛЬКО после отработки твина ставит ему новые параметры. Только вот вызывался бы этот метод сначала...

iNils
13.06.2008, 17:52
Но пишет "The class or interface 'fl.transitions.TweenEvent' could not be loaded." Жалуясь на строку "private function tweenFinished(e:TweenEvent) {"Не путайте AS2 c AS3
Попробуйте сначала написать классическим способом, то есть задавая параметры в new Tween

И мультипостинг у нас запрещен. Редактируйте последнее ваше сообщение.

ekeeper
16.06.2008, 19:00
Заработало. Но остался один косяк.

Сначала опишу что надо получить в конце - объект (мувик) движется по прямым линиям - поворачивает под прямым углом.

То есть:
- расчитывается начальная и конечная точка прямой
- объект двигается (None.easeNone)
- как только заканчивается движение идет переход в onMotionFinished
- в onMotionFinished расчитывается следующая точка и делается new Tween с новыми настройками

переменная твина объявлена одна - то есть каждый раз new Tween инициализируется в одной переменной.

Проблемы:
1. На "поворотах" все притормаживается. Движение по кривой получается не плавное а с "паузами" в углах
(сделал onMotionFinished, чтобы использовался прежний объект но с другими настройками, а не new Tween - залипать стало меньше, но все равно)
2. Иногда объект не движется, а просто перепрыгивает из начальной точки в конечную - хлоп и все.


UPD: Решил проблему 1 перейдя на Regular.easeInOut - дело в том, что объект - машинка - для нее логично ускоряться, а на поворотах снижать скорость - выглядит естественно. С перепрыгиванием бы теперь решить :(

UPD: Все проблемы решены :)))