Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   События Класса Tween (http://www.flasher.ru/forum/showthread.php?t=112953)

ekeeper 13.06.2008 17:03

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

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) {"

Цитата:

Сообщение от iNils (Сообщение 745430)
А где параметры?

Параметры все задаются в другом методе -

Код:

        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

Цитата:

Сообщение от iNils (Сообщение 745434)
Зачем? Такой подход рано или поздно приведет к ошибке, если первый твин не отработался, а вы задаете ему новые параметры?

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

Код:

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

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

iNils 13.06.2008 17:52

Цитата:

Сообщение от ekeeper (Сообщение 745431)
Но пишет "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: Все проблемы решены :)))


Часовой пояс GMT +4, время: 13:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.