Показать сообщение отдельно
Старый 14.10.2008, 15:28
nikitakozin вне форума Посмотреть профиль Отправить личное сообщение для nikitakozin Посетить домашнюю страницу nikitakozin Найти все сообщения от nikitakozin
  № 1  
Ответить с цитированием
nikitakozin

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
По умолчанию Не работает Tween внутри своего класса

Есть вот такой вот ролик:
http://chinacars.ru/img/des/visual.swf

Сейчас мне нужно добавить в него ещё одну машины и я хочу его переписать, чтобы анимация была программная. Например, чтобы автобус без торможения в середине пути ездил из одной крайней точки до другой.

Я написал свой класс, но по непонятной мне причине не работает Tween.

Car.as
Код:
import mx.transitions.*;
import mx.transitions.easing.*;
	
class Car {

	public static var iMotionSteps = 50;
	private static var _frame = 0;


	private var bInMotion = false;
	private var sDirection = null;
	private var eObject = null;
	private var oTween = null;
	private var oTweenCounter = null;
	private var iHomeX = 0;
	private var iForwardX = 0;
	private var iBackwardX = 0;

	public function Car( _mc:MovieClip, _iHomeX, _iForwardX, _iBackwardX, _iMotionSteps ){
		eObject = _mc;
		iHomeX = _iHomeX;
		iForwardX = _iForwardX;
		iBackwardX = _iBackwardX;
		iMotionSteps = _iMotionSteps;
		oTween = new mx.transitions.Tween( eObject, '_x', mx.transitions.easing.Regular.easeInOut, eObject._x, eObject._x, 1);
	}

	public function Forward(){
		this.sDirection = 'Forward';
		this._Go( iForwardX );
	}

	public function Backward(){
		this.sDirection = 'Backward';
		this._Go( iBackwardX );
	}

	public function Home(){
		this.sDirection = 'Home';
		this._Go( iHomeX );
	}

	private function _Go( iX ){
		trace( sDirection + ', ' + bInMotion + ', ' + iX );
		if( !bInMotion ){
			bInMotion = true;
			oTween = new mx.transitions.Tween(eObject, '_x', mx.transitions.easing.Regular.easeInOut, eObject._x, iX, iMotionSteps);
			oTweenCounter = new mx.transitions.Tween(eObject, '_frame', null, 0, iMotionSteps, iMotionSteps);
			oTween.onMotionFinished = function(){
				bInMotion = false;
			}
			oTweenCounter.onMotionFinished = function(){
				eObject._frame = 0;
			}
			eObject.gotoAndPlay( 'Start' );
		} else {
			oTween.onMotionFinished = function(){
				bInMotion = false;
				switch( sDirection ){
					case 'Forward': Forward(); break;
					case 'Backward': Backward(); break;
					case 'Home': Home(); break;
				}
			}
		}
	}

}
И в основном ролике:
Код:
import Car.as;

var oBus:Car = new Car( Bus, 150, 350, -100 );
На сцене уже расположен клип с именем Bus.
Почему-то не происходит Tween и, соответственно, не срабатывает Tween.onMotionFinished (

P.S. С классами во флеше первый раз работаю