Маски - сакс, массивы рулят - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 41234»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Примеры, статьи » Маски - сакс, массивы рулят (замена метода коллизий массивами)
Маски - сакс, массивы рулят
DreamRunner Дата: Суббота, 10.06.2006, 06:05 | Сообщение # 1
Админ
Группа: Админы
Сообщений: 1382
Статус: Offline
Ну вот. Вчера мне подумалось - а какого х я ещё не попробовал поюзать массивы на виде сбоку, когда использовал их уже и на виде сверху и на изометрии. Марк нам капитально забил голову своими платформами с блоками масок и только сейчас мой разум освободился полностью от этого заблуждения smile

И поюзал. Теперь вместо перебора (причём обычно за степ мы перебираем несколько раз) 2500 блоков дающие 15фпс из 60 мне требуется несколько раз глянуть в массив. Память жрёт? Да и х с ней smile - её не может не быть, а вот уровни можно делать просто немерянные. Сегодня полностью попробую перевести свой платформер на это дело, у меня всёравно остаётся массив проходов после генерации уровня.

ЗЫ: Значит так.. все права на создание туториала по этой теме беру себе smile
ЗЫЫ: Цветы, шампанское потом smile Мы на пороге величайшей революции, тавагищи!

Прилагаю файл с примером: http://vl.hoha.ru/myexamp/array_collision.zip



Сообщение отредактировал DreamRunner - Воскресенье, 18.06.2006, 08:32
 
Mic-[DM] Дата: Суббота, 10.06.2006, 07:40 | Сообщение # 2
Всех уже задолбал
Группа: Высший Советник
Сообщений: 888
Статус: Offline
Видно, мой разум все еще под влиянием. DreamRunner, нельзя ли как-нибудь на пальцах объяснить, что за хитрость содержится в твоих массивах?
 
Bartok Дата: Суббота, 10.06.2006, 08:04 | Сообщение # 3
Молчун
Группа: Пользователь
Сообщений: 24
Статус: Offline
Я тоже ничерта не понел. wacko


 
DreamRunner Дата: Суббота, 10.06.2006, 08:21 | Сообщение # 4
Админ
Группа: Админы
Сообщений: 1382
Статус: Offline
Ну во первых... Bartok, убавь количество юзер баров до 1+ можно подпись smile

Ладно. в двух словах, остальное в туторе.
Что есть карта уровня? это пустота, блоки с масками, тайлы... и всё это дело размещается в узлах сетки обычно. Нужен массив в котором 0=проходимая часть, 1=непроходимая. Т.е. блоки с масками выкидываем и сопостовляем их место с соответствующей ячейкой. К примеру ячейка (3,4) равная 1 будет аналогична блоку поставленному в (3*64,4*64) , где 64 - размер сетки и блока и скорее всего тайла. Теперь вместо проверки коллизии со всеми этими блоками в точке (например) (123,642), мы просто смотрим какое значение у ячейки для данного квадрата, т.е. masks[floor(123/64),floor(642/64)].

Вот так. Конечно это применимо для уровней, где все маски привязаны к сетке (а обычно так оно и есть). Можно сделать разные значения ячеек для масок с разными свойствами, типа 2=лестница, 3=выход_из_уровня.

 
Bartok Дата: Суббота, 10.06.2006, 08:32 | Сообщение # 5
Молчун
Группа: Пользователь
Сообщений: 24
Статус: Offline
это тебе во сне приснилось?


 
Fint_ru Дата: Суббота, 10.06.2006, 09:22 | Сообщение # 6
Хоть палкой гони
Группа: Высший Советник
Сообщений: 545
Статус: Offline
Что-то философское. Пока не вкуриваю, но починю примус и займусь.
Дриму нобеля!!!



смешные статусы для qip'a ^_^
"Во мне поселилась жестокая сволочь, которая не прощает мои слабости о_О" © мое
 
Mic-[DM] Дата: Суббота, 10.06.2006, 10:35 | Сообщение # 7
Всех уже задолбал
Группа: Высший Советник
Сообщений: 888
Статус: Offline
Quote (Fint_ru)
Дриму нобеля
Динамиту ему. Я вроде понял, идея понравилась.
А если маска не прямоугольной формы? Скажем, есть пол, но он наклонный. Получится, что половина ячейки - пол, а другая половина - пустота? Как тогда быть.
Вообще, удобный метод. Можно различное окружение реализовать (вода, еще что-то).
 
PaVeLius Дата: Суббота, 10.06.2006, 11:16 | Сообщение # 8
Хрен заткнешь
Группа: Страж
Сообщений: 436
Статус: Offline
идея неплохая, но тогда все колижены придеться самому обрабатывать, хотя, учитывая тот факт, что, например у меня, у объектов есть только два события(Create и Draw), где я все равно юзаю place_free и т.д., мысль вполне здправая. Проведи тестирование, как оно со скоростью получится.


"In theory, theory and practice are the same. In practice, they are not."
— Albert Einstein

http://twitter.com/suilevap
https://plus.google.com/103540372433348301959
 
Fint_ru Дата: Суббота, 10.06.2006, 11:17 | Сообщение # 9
Хоть палкой гони
Группа: Высший Советник
Сообщений: 545
Статус: Offline
Как я понимаю это для песа ведь весь код будет, но ведь и противники тоже его юзать должны. Уже больше обращений.
Или я не вкуриваю ничего.



смешные статусы для qip'a ^_^
"Во мне поселилась жестокая сволочь, которая не прощает мои слабости о_О" © мое
 
Jeners Дата: Суббота, 10.06.2006, 11:25 | Сообщение # 10
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1619
Статус: Offline
Не наю я вкурил только прочитав первые строки в посте Dream'a wacko
Вобщем он хочет юзать не обьекты Блоки на карте.. а напрямую юзать массив:
1.Для отображения уровня
2.Для коллизии игрока с етимм "визиуальными" блоками.

Добавлено (10.06.2006, 11:25)
---------------------------------------------
Хотя я подумал.. рисование ппц как много будет жрать.. если только Dream
не будет юзать тайлы... smile



Интернет католог строителей

Сообщение отредактировал Jeners - Суббота, 10.06.2006, 11:47
 
CH@$ER Дата: Суббота, 10.06.2006, 11:50 | Сообщение # 11
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1088
Статус: Offline
Я врубился как: эти массивы содержат только указатель, что в ячейке что-то есть и все. А уже можно написать скрипт, который смотрит от положения объекта, если в массиве есть 1 в этой точке, значит столкновения. А по скорости это будет намного быстрее, т.к. стандартные столкновения циклом все объекты проверят на столкновения. Тоесть если у вас 16 объектов, то циклов будет 16, а проверок 16^2, а так всего одна.

Jeners, тайлы точно также рисуются как и объекты - посути, тайлы и есть объекты, просто они не являются объектами ГМ



Создание 3D FPS · Онлайновые таблицы рекордов · Многое другое!
 
Jeners Дата: Суббота, 10.06.2006, 11:55 | Сообщение # 12
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1619
Статус: Offline
Quote
Jeners, тайлы точно также рисуются как и объекты - посути, тайлы и есть объекты, просто они не являются объектами ГМ

CH@$ER, Может и являються обьектами.. но их отоброжение в раз 20 быстрее happy
так что юзать тайлы вместо рисования ето лучше.(и не спорь со мной ето знает каждый
ГМ'щик wink )
Quote
А по скорости это будет намного быстрее, т.к. стандартные столкновения циклом все объекты проверят на столкновения. Тоесть если у вас 16 объектов, то циклов будет 16, а проверок 16^2, а так всего одна.

Гм... а ты уверен что столкновение проверяеться в реальном времени?..
просто я в етом сам лично не уверен.


Интернет католог строителей
 
CH@$ER Дата: Суббота, 10.06.2006, 12:00 | Сообщение # 13
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1088
Статус: Offline
Jeners, просто у тайлов не обрабатываются события столкновений, стипов и т.д. как у объектов;)

А что насчет столкновений - просто не у всех объектов столкновения включены. Если есть событие столкновения, значит оба объекты включаются в этот список.



Создание 3D FPS · Онлайновые таблицы рекордов · Многое другое!
 
Jeners Дата: Суббота, 10.06.2006, 12:03 | Сообщение # 14
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1619
Статус: Offline
CH@$ER, Ну дык в чем проблема? wink
юзай программное столкновение. smile
Так что CH@$ER, фитча уровня "массивом" в том что просто не создавать обьекты
(каждый обьект занимает память не зависимо от его "полноты") этим и привлекательно "Масивнное"
постороение уровня


Интернет католог строителей
 
CH@$ER Дата: Суббота, 10.06.2006, 12:05 | Сообщение # 15
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1088
Статус: Offline
Jeners, да нет, ты не то говоришь. Впрочем чего спорить? Дождемся DreamRunner'a и он все скажет! Хотя я и так знаю, что он скажет.


Создание 3D FPS · Онлайновые таблицы рекордов · Многое другое!
 
Jeners Дата: Суббота, 10.06.2006, 12:07 | Сообщение # 16
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1619
Статус: Offline
CH@$ER, Да я считаю что спорить вооще не имеет смысла..
по крайней мере нам smile
у нас разный взгляд на задачи.


Интернет католог строителей
 
CH@$ER Дата: Суббота, 10.06.2006, 12:08 | Сообщение # 17
Всех уже задолбал
Группа: Высший Советник
Сообщений: 1088
Статус: Offline
Кстати, DreamRunner, используй списки - они быстрее wink (Причем это было сказано в хелпе)


Создание 3D FPS · Онлайновые таблицы рекордов · Многое другое!
 
Jeners Дата: Суббота, 10.06.2006, 12:15 | Сообщение # 18
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1619
Статус: Offline
DreamRunner, еще можно сделать проверку в проверке smile
так сказать проверка на дальнотсть массива от игрока..
Так как проверка на дальность (я думаю)
работает быстрее проверки collision
Типо:

Code
for (i=0;i<=room_height/32;i+=1)
   {
   for (n=0;n<=room_width/32;n+=1)
     {
     if distance_to_point(n*32,i*32)<320
       {
       if collision_rectangle(n*32,i*32,n*32-32,i*32-32,object_index,0,0)
       gravity=0
       }
     }
   }



Интернет католог строителей
 
DreamRunner Дата: Суббота, 10.06.2006, 12:29 | Сообщение # 19
Админ
Группа: Админы
Сообщений: 1382
Статус: Offline
млин.. великие идеи всегда встречали великое непонимание smile

Quote (Mic-[DM)
]А если маска не прямоугольной формы? Скажем, есть пол, но он наклонный. Получится, что половина ячейки - пол, а другая половина - пустота? Как тогда быть.

тогда ты присваиваешь ячейке наклон_влево=11

Иф ячейка под ногами=11
y= (формула наклонной линии)

Ну это грубо говоря.

Quote (PaVeLius)
но тогда все колижены придеться самому обрабатывать

Вся обработка заключается в: Посмотреть клетку (ячейку массива) куда мы собираемся ступить. Никаких переборов! Типа
if map[(x+hspeed)/64,y/64]=1
hspeed=0

Quote (PaVeLius)
Проведи тестирование, как оно со скоростью получится.

Провёл на своей Jane. Задал карту 30x5X30x5. Получил 10500 блоков-стен, столько же тайлов+тайлы внутренних помещений уровня(кирпичный фон). С коллизиями фпс=2 , через массив фпс=53-59 из 60ти. Я тут офигеваю просто. Ниже скрины в архиве. На втором план уровня с дебажной инфой. Одна точка на плане=квадрат 64х64. Что это за мегауровень представить сложно. Можно неделю бегать без карты, искать выход. smile

Quote (Fint_ru)
Уже больше обращений

smile ага больше. С коллизиями это +10000*кол-во_врагов, в массивом понятно сколько ) Есть "некоторая" выгода biggrin

Quote (Jeners)
Вобщем он хочет юзать не обьекта Блоки на карте.. а напрямую юзать масив:
1.для отображения уровня
2.Для коллизии игрока с етимм "визиуальными" блоками.

Я юзаю массив для расстановки тайлов в начале игры, а далее для узнавани, где там у нас стена.

Прикрепления: 30892104.rar(48Kb)
 
Jeners Дата: Суббота, 10.06.2006, 12:31 | Сообщение # 20
Каждый 5й пост мой
Группа: Проверенные
Сообщений: 1619
Статус: Offline
DreamRunner, Млин мне кажиться ты ето строчил в офлайне biggrin
Стоко уже нового написали )


Интернет католог строителей

Сообщение отредактировал Jeners - Суббота, 10.06.2006, 12:31
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Примеры, статьи » Маски - сакс, массивы рулят (замена метода коллизий массивами)
Страница 1 из 41234»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход