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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.12.2013, 04:46
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Post Передача параметра в функцию, вызываемую через Enter Frame

Коллеги, изучив поиск по данному вопросу, не нашел однозначного решения.
Прошу извинить мои неизящные размышления, я выходец из AS2, переход не дается так просто...

Приведу простой пример. Есть некоторый класс Engine, в котором через функцию placeBullet создается экземпляр класса Bullet и добавляется на сцену. И далее, я хочу через Enter Frame двигать этот экземпляр. Важно, что экземпляров одновременно может быть несколько.
Код AS3:
private function placeBullet (mc:Object)
{
	var bullet:Bullet = new Bullet();
	addChild(bullet);
	bullet.x = mc.x;
	bullet.y = mc.y;
	//
	bullet.addEventListener(Event.ENTER_FRAME, moveBullet);
}
Далее я создаю функцию moveBullet:
Код AS3:
private function moveBullet(event:Event)
{
 
}
... и понимаю, что не могу обратиться напрямую к экземпляру bullet, т.к. он создан внутри функции placeBullet и не виден снаружи. Если же его выносить наружу, то невозможно создать несколько одновременных экземпляров - предыдущий будет удаляться.
Т.е. мне бы хотелось иметь возможность сделать что-то похожее на это:
Код AS3:
bullet.addEventListener(Event.ENTER_FRAME, moveBullet(bullet));
И это только пол-беды. Двигать пулю мне бы хотелось в направлении, равном
Код AS3:
mc.rotation
Соответственно, хотелось бы иметь следующую картину:
Код AS3:
private function placeBullet (mc:Object)
{
	var bullet:Bullet = new Bullet();
	addChild(bullet);
	bullet.x = mc.x;
	bullet.y = mc.y;
	//
	bullet.addEventListener(Event.ENTER_FRAME, moveBullet(bullet, mc.rotation));
}
//
private function moveBullet(event:Event, mc:Object, angle:Number)
{
	mc.x += speed*Math.cos(angle);
	mc.y += speed*Math.sin(angle);
}
Понятно, что моего решения не существует... Интересует выход из данной ситуации, что посоветуете?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Массив буллетов.
__________________
Reality.getBounds(this);

Старый 01.12.2013, 11:14
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
при создании пули помещаете ее в массив пуль(или вектор пуль), внутрь пули пишите ее угол поворота и скорость(если она разная), по энтерфрейму пробегаетесь по массиву с пулями, и передевигаете каждую.

Старый 01.12.2013, 12:51
Nucer вне форума Посмотреть профиль Отправить личное сообщение для Nucer Посетить домашнюю страницу Nucer Найти все сообщения от Nucer
  № 4  
Ответить с цитированием
Nucer
[++]
 
Аватар для Nucer

Регистрация: Jan 2003
Адрес: Москва
Сообщений: 839
Отправить сообщение для Nucer с помощью ICQ
Меняйте своё мышление!!))
Создаёте класс, который будет отвечать за все ваши пули, типа BulletManager, в нём делаете массив (а лучше вектор) ваших объектов - все новосозданные объекты добавляйте туда.
Далее... Не вижу, что вам мешает нормально сделать класс Bullet? Прописать всю необходимую логику внутри самого класса Bullet (в т.ч. все листенеры), а не в анонимной функции? При необходимости, можете конструктору класса Bullet передавать ссылку на объект, его создавший (или же на тот мувиклип, где нужно двигать сам буллет).
Надеюсь стало яснее))

Старый 01.12.2013, 16:59
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Спасибо! Массив - это действительно хорошая идея, буду пробовать.
На счет:
Цитата:
Сообщение от Nucer Посмотреть сообщение
Меняйте своё мышление!!))
... я бы с радостью. Посоветуйте толковое чтиво в контексте грамотного подхода к ООП. Ибо на сегодняшний день я создаю классы без всякой системы, скорее, чтобы попробовать, что это такое и научиться с ними немного работать.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Как-то не попадалось толковых книг именно по абстрагированию, то есть вычленению объектов (классов) в хаосе проектного задания; обычно размышления об этом раскиданы то там то сям, хотя это конечно самая основа ООП, правильно вычленить классы и разделить между ними ответственности. Кое что есть у Роберта Мартина в "Чистом коде", или у Мартина Фаулера в "Рефакторинге", но применительно к AS3 было бы полезно почитать книгу о шаблонах.
Это как раз первая в мире книга по AS3, призванная сразу направить в нужное русло "выходцев из AS2", поэтому ООП там уделено практически все внимание, не столько его "чистоте" как у Мартинов, сколько начальному ООП-мышлению.
__________________
Reality.getBounds(this);

Старый 01.12.2013, 18:32
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 7  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Как-то не попадалось толковых книг именно по абстрагированию, то есть вычленению объектов (классов) в хаосе проектного задания; обычно размышления об этом раскиданы то там то сям, хотя это конечно самая основа ООП, правильно вычленить классы и разделить между ними ответственности. Кое что есть у Роберта Мартина в "Чистом коде", или у Мартина Фаулера в "Рефакторинге", но применительно к AS3 было бы полезно почитать книгу о шаблонах.
Это как раз первая в мире книга по AS3, призванная сразу направить в нужное русло "выходцев из AS2", поэтому ООП там уделено практически все внимание, не столько его "чистоте" как у Мартинов, сколько начальному ООП-мышлению.
Большое спасибо!

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от australian incognito Посмотреть сообщение
Посоветуйте толковое чтиво в контексте грамотного подхода к ООП. Ибо на сегодняшний день я создаю классы без всякой системы, скорее, чтобы попробовать, что это такое и научиться с ними немного работать.
Вот по вашей теме.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Mar 2006
Адрес: Odessa
Сообщений: 157
Цитата:
Далее я создаю функцию moveBullet:
Код AS3:
private function moveBullet(event:Event)
{
 
}
... и понимаю, что не могу обратиться напрямую к экземпляру bullet, т.к. он создан внутри функции placeBullet и не виден снаружи.
Код AS3:
private function moveBullet(event:Event)
{
	var bullet: Bullet = event.currentTarget as Bullet; // это ваш Bullet, делайте с ним что хотите
}
Но массив пуль, конечно, правильней.
__________________
Не всех война убила - многих покалечила

Старый 01.12.2013, 22:38
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 10  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от alatar Посмотреть сообщение
Отлично, буду тоже изучать. Спасибо за ссылку.

Добавлено через 43 секунды
Цитата:
Сообщение от RandomUser Посмотреть сообщение
Код AS3:
private function moveBullet(event:Event)
{
	var bullet: Bullet = event.currentTarget as Bullet; // это ваш Bullet, делайте с ним что хотите
}
Но массив пуль, конечно, правильней.
\
Это тоже полезное замечание, чувствовал одним местом, что можно так, но не знал, как именно. Спасибо.

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

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

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


 


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


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