|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Не работает 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; } } } } } На сцене уже расположен клип с именем Bus. Почему-то не происходит Tween и, соответственно, не срабатывает Tween.onMotionFinished ( P.S. С классами во флеше первый раз работаю |
|
|||||
За один кадр никуда не двигаться. Сначала сделал, потом убрал. Думал как с блюром — сначала создать объект, а потом менять его свойства только, но не разобрался ещё толком тогда. В итоге убрал, но остальное-то всё равно не работает. Как показали опыты iMotionSteps почему-то undefined, но почему я так и не понял, по логике вроде должна быть 50.
Ооо, я кажется понял в чём дело — я же его при создании объекта класса переопределяю, но не передаю в конструктор класса, вот и получается — undefined. Завтра на работу приду попробую, надеюсь, что всё получится :-) Последний раз редактировалось iNils; 14.10.2008 в 19:38. |
|
|||||
Разобрался с присваиванием параметра, немного доработал:
import mx.transitions.*; import mx.transitions.easing.*; class Car { private var bInMotion = false; private var sDirection = null; private var eObject = null; private var oTween = null; private var iHomeX = 0; private var iForwardX = 0; private var iBackwardX = 0; private var iMotionSteps = 50; public function Car( _mc:MovieClip, _iHomeX, _iForwardX, _iBackwardX, _iMotionSteps ){ eObject = _mc; iHomeX = _iHomeX; iForwardX = _iForwardX; iBackwardX = _iBackwardX; if( _iMotionSteps ){ iMotionSteps = _iMotionSteps; } } public function Forward(){ 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 ){ var _iCurrentFrame = 0; if( !bInMotion ){ bInMotion = true; oTween = new mx.transitions.Tween( eObject, '_x', mx.transitions.easing.Regular.easeInOut, eObject._x, iX, iMotionSteps ); oTween.onMotionChanged = function(){ _iCurrentFrame++; } oTween.onMotionFinished = function(){ bInMotion = false; _iCurrentFrame = 0; } eObject.gotoAndPlay( 'Start' ); } else { oTween.onMotionFinished = function(){ bInMotion = false; switch( sDirection ){ case 'Forward': Forward(); break; case 'Backward': Backward(); break; case 'Home': Home(); break; } } } } } Проблема в изменении значения свойства класса — bInMotion, внутри функции переменную могу изменить, а записать значение в свойства класса не получается ( |
|
|||||
.
|
Используйте Delegate или self-reference ссылку app на объект класса, например:
|
|
|||||
Спасибо, dimarik.
Решил вынести разные машины в разные swf и подгружать их тоже в классе, получилось так: public function Car( _Name:String, _iHomeX:Number, _iForwardX:Number, _iBackwardX:Number, _iMotionSteps:Number ){ trace( '=' + arguments[0] + '=' + _Name + '=' ); mObject = _root.createEmptyMovieClip( _Name, _root.getNextHighestDepth() ); loadMovie( _Name + 'swf', mObject ); … } Почему-то выводит: «=Bus==», т.е. если обращаться по имени к параметру, то возвращает пустую строку. Ну, и мувик, соответственно, не грузит. |
Часовой пояс GMT +4, время: 01:07. |
|
« Предыдущая тема | Следующая тема » |
Теги |
class , tween |
|
|