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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.05.2008, 13:49
Dr.XxX вне форума Посмотреть профиль Отправить личное сообщение для Dr.XxX Найти все сообщения от Dr.XxX
  № 1  
Ответить с цитированием
Dr.XxX

Регистрация: Dec 2006
Сообщений: 207
По умолчанию Присваивание одного метода многим объектам.

У меня есть класс:
Код:
class Car extends MovieClip {
	var CarSize:Number = 150-random(100);
	var CarSpeed:Number = 10-random(5);
	private var _Car:MovieClip;
	public function Car(Car:MovieClip) {
		_Car = Car;
	}
	public function moveCar() {
		_Car._xscale = CarSize;
		_Car._yscale = CarSize;
		_Car._x += CarSpeed;
	}
}
В .fla файле пишу:
Код:
honda = attachMovie("honda", "honda"+_root.getNextHighestDepth(), _root.getNextHighestDepth());
var honda:Car = new Car(honda);
_root.onEnterFrame = function() {
	honda.moveCar();
};

Всё работает, как надо, но а если я хочу сделать 20 мувиклипов honda и всем им присвоить honda.moveCar();.
То единственный вариант это двадцать раз атачить honda,honda1,honda2 в ручную и каждому присваивать honda1.moveCar();,honda2.moveCar(); ?

Или можно сделать как-то по короче ?

Старый 31.05.2008, 13:55
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 2  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
А с помощью broadcastMessage() пробовали?

Цитата:
двадцать раз атачить honda,honda1,honda2 в ручную
Это как? Поясните. У Вас вроде бы символ аттачится программно.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Идете в библиотеку, ищите там символ honda, и под полем где писали honda, пишите Car.
Сам класс модифицируете так:
Код:
class Car extends MovieClip {
	private var onEnterFrame:Function;
	private var carSize:Number = null;
	private var carSpeed:Number = null;
	
	public function Car() {
		carSize = 150 - Math.random () * 100;
		carSpeed = 10 - Math.random () * 5;
	}
	
	public function runCar ():Void {
		onEnterFrame = onMoveCar;
	}
	public function stopCar ():Void {
		delete onEnterFrame;
	}
	
	private function onMoveCar ():Void {
		_xscale = carSize;
		_yscale = carSize;
		_x += carSpeed;
	}
}
Заметьте:
1. С большой буквый пишут только названия классов интерфейсы, и методы и свойства с маленькой
2. В AS2 задавать дефолтный свойства можно только в конструкторе или методах. Ни в коем случаие не делайте этого при объявлении самих свойств. Иначе все будут иметь одинаковое значение. Это баг AS2.

Вопрос: зачем задавать размер машине, при каждом вызове onEnterFrame?

Теперь сам вызов
Код:
for (var i:Number = 0; i < 20; i++) {
	var d:Number = +this.getNextHighestDepth ();
	var honda:Honda = Honda (this.attachMovie ("honda", "honda" + d, d));
	honda.moveCar ();
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 31.05.2008, 16:02
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 4  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
iNils! При всем уважении, Вы забыли new:

Код:
var honda:Honda = Honda (this.attachMovie ("honda", "honda" + d, d));

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

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

Старый 31.05.2008, 16:05
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 6  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Понял. Надо было мне с самого начала читать.

iNils! А с помощью broadcastMessage() можно организовать вызов метода moveCar всех клипов? Или это невозможно?


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

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

Старый 31.05.2008, 16:34
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 8  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Понял. Нецелесообразно.

Старый 31.05.2008, 23:52
Dr.XxX вне форума Посмотреть профиль Отправить личное сообщение для Dr.XxX Найти все сообщения от Dr.XxX
  № 9  
Ответить с цитированием
Dr.XxX

Регистрация: Dec 2006
Сообщений: 207
Спасибо, работает.

Только вы наверное имели ввиду тут :
Код:
for (var i:Number = 0; i < 20; i++) {
	var d:Number = +this.getNextHighestDepth ();
	var honda:Honda = Honda (this.attachMovie ("honda", "honda" + d, d));
	honda.moveCar ();
}
не honda.moveCar(); , а honda.runCar();

И ещё вопрос, не могли бы сказать зачем эта строчка :
var d:Number = +this.getNextHighestDepth ();
Если вроде можно записать так:
var honda:Honda = Honda (this.attachMovie ("honda", "honda" + _root.getNextHighestDepth(), _root.getNextHighestDepth());

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Про runCar верно, писал в блокноте.

Про var d:Number, лучше один раз определить переменную, что нескольраз ее вычислять и код так легче читается.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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