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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question Как реализуется в играх сбор coins ?

Подскажите, как реализуется в аркадных играх сбор, к примеру, всяких монеток разбросанных по уровню?
Я себе тут придумал алгоритм, но, чувствую, но крив.
Я бы делал так:

1. Повытаскивал бы на сцену в нужные места клип coin.
2. В поле Instance name вписал бы каждой монетке имя "coin01", "coin02" итд...
3. В классе игры создал бы функцию, которая бы в цикле перебирала все монетки и проверяла с помощью hitTest, не столкнулся ли клип герой с каждой из монеток.
4. Если столкнулся - удаляла бы со сцены клип монетки, на которой случилось событие hitTest

Думаю, всё должно быть как-то иначе.
Может быть делается всё гораздо изящнее, проще и быстрее в работе?
А то, к примеру, если у меня несколько сотен таких монеток на уровне разбросано, я во-первых замучаюсь их наименовать, а во-вторых, цикл проверки в несколько сотен шагов, запускающийся в каждом кадре, будет здорово тормозить процесс.

Старый 05.07.2010, 20:56
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 2  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Если расположить монетки на равномерной сетке с довольно крупными ячейками, то достаточно проверять ячейки, и уже по факту касания ячейки с монеткой делать нужные проверки и удалять клин. Гораздо меньше вычислительных затрат. Собственно, так всегда и делалось, когда ресурсы не измерялись в "гига..".

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

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

Старый 06.07.2010, 00:48
vinch вне форума Посмотреть профиль Отправить личное сообщение для vinch Найти все сообщения от vinch
  № 4  
Ответить с цитированием
vinch

Регистрация: Feb 2010
Сообщений: 95
А для чего давать название монетам? Проще при загрузке уровня делать перебор детей на сцене и при этом запихать нужные объекты монет в массив.


Последний раз редактировалось vinch; 06.07.2010 в 00:50.
Старый 06.07.2010, 12:00
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 5  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
VVall: тоесть не использовать хиттест, а просто проверять координаты? А тогда вот всё равно. Представьте 300 монеток на уровне. И делать в каждом кадре 300 проверок координат?
И ещё я не совсем понял. Ведь координаты - это положение по х и у одной точки? У меня герой движется попиксельно. Тоесть чтобы событие произошло, надо чтобы координата какой-то точки героя (скажем его центра) совпала с координатой центра монетки. Тоесть пиксель в пиксель чтобы. А такое же маловероятно.
Или я неправильно понял что-то?
vinch: не очень пока слёту понял. но попробую разобраться. спасибо.

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

Регистрация: Oct 2009
Сообщений: 112
Записей в блоге: 1
можно вычислять расстояние между центром вашего героя и центром монеты - если оно меньше определенного .. к примеру радиуса монеты - то значит герой собрал монетку.

Старый 06.07.2010, 12:25
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
VVall как бы намекает, что в случае сетки мы проверяем только пересечённые телом клетки на предмет наличия в них монетки, а не все 300 монет.
PS: если 300 - реально максимальное число, то это не много, но если всё так на пересечение проверять, то могут начаться тормоза.

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

блогер
Регистрация: Jul 2010
Сообщений: 117
Записей в блоге: 4
Можно внутри каждой монетки создать обработчик события EnterFrame, в котором проверяется столкновение с героем. Это решит проблему с именами, они будут вообще не важны.

Что касается быстродействия... Там надо игровой мир разделить на экраны (если персонаж не слишком быстро движется) и динамически их подгружать и выгружать, но это уже высший пилотаж игроделов))) Поэтому просто сделайте внутри класса клипа обработчик EnterFrame и наслаждайтесь простым размещением и сбором монеток.

P.S: Если возникнут проблемы с кодом, пишите в личку, помогу

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

Регистрация: Feb 2010
Сообщений: 95
Jarproger, не раз встречал мнение, что лучше обновлять игровые объекты в одном месте (я не знаю, каким должен быть правильный игровой фреймворк, но у меня это делается в классе уровня), а не в каждом объекте по ENTER_FRAME.

In8Finity, наверное, за монетки будет отвечать какие-то отдельные символы? Тогда я бы делал так: при загрузке уровня прошелся по всем детям изображения уровня и добавлял нужные объекты в массив:
Код AS3:
for (var i:Number = 0; i < levelSprite.numChildren; ++i)
{
	if (level.getChildAt(i) is CoinSprite)
		coins.push(levelSprite.getChild(i));
}
, а потом по ENTER_FRAME перебирал монетки в массиве и обновлял их. В таком случае пропадает необходимость именовать монетки и грузить их по имени.

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

блогер
Регистрация: Jul 2010
Сообщений: 117
Записей в блоге: 4
vinch, согласен, можно и так сделать

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

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

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


 


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


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