Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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. С классами во флеше первый раз работаю

Старый 14.10.2008, 16:14
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Код:
oTween = new Tween( eObject, '_x', Regular.easeInOut, eObject._x, eObject._x, 1);
откуда докуда?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
За один кадр никуда не двигаться. Сначала сделал, потом убрал. Думал как с блюром — сначала создать объект, а потом менять его свойства только, но не разобрался ещё толком тогда. В итоге убрал, но остальное-то всё равно не работает. Как показали опыты iMotionSteps почему-то undefined, но почему я так и не понял, по логике вроде должна быть 50.

Ооо, я кажется понял в чём дело — я же его при создании объекта класса переопределяю, но не передаю в конструктор класса, вот и получается — undefined. Завтра на работу приду попробую, надеюсь, что всё получится :-)


Последний раз редактировалось iNils; 14.10.2008 в 19:38.
Старый 14.10.2008, 19:38
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Мультипостинг у нас запрещен.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.10.2008, 10:04
nikitakozin вне форума Посмотреть профиль Отправить личное сообщение для nikitakozin Посетить домашнюю страницу nikitakozin Найти все сообщения от nikitakozin
  № 5  
Ответить с цитированием
nikitakozin

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
Разобрался с присваиванием параметра, немного доработал:

Код:
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;
				}
			}
		}
	}

}
Теперь возник вопрос вот в этом куске кода:
Код:
			oTween.onMotionFinished = function(){
				bInMotion = false;
				_iCurrentFrame = 0;
			}
Проблема в изменении значения свойства класса — bInMotion, внутри функции переменную могу изменить, а записать значение в свойства класса не получается (

Старый 15.10.2008, 10:14
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Используйте Delegate или self-reference ссылку app на объект класса, например:
Код:
class Car {
	private var _bInMotion:Boolean = false;

	// Skipped

	private function go(iX:Number):Void {
		var app:		Car = this;
		var iCurrentFrame:	Number;

		// Skipped

		oTween.onMotionFinished = function():Void{
			app._bInMotion = false;
			iCurrentFrame = 0;
		};
	}
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 15.10.2008, 12:51
nikitakozin вне форума Посмотреть профиль Отправить личное сообщение для nikitakozin Посетить домашнюю страницу nikitakozin Найти все сообщения от nikitakozin
  № 7  
Ответить с цитированием
nikitakozin

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
Спасибо, 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 );
		…
	}
Вот так создаю:
Код:
var oBus:Car = new Car( 'Bus', 100, 350, -100 );
Почему-то выводит: «=Bus==», т.е. если обращаться по имени к параметру, то возвращает пустую строку. Ну, и мувик, соответственно, не грузит.

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
class , tween
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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