![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Есть вот такой вот ролик:
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, время: 23:13. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| class , tween |
|
|