forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Тайлы, коллизия между ними и другое... (http://forum.boolean.name/showthread.php?t=11689)

Manfred 09.01.2010 01:04

Тайлы, коллизия между ними и другое...
 
Доброго дня.. В первую очередь, хочу поздравить всех, читающих данную тему с Новым Годом и Рождеством Христовым. Всех земных благ вам, Уважаемые!

Во вторую очередь выражаю благодарность Dimanche13 за BM уроки о тайловом движке, которые я читал с отрадой и искреннем чувством созидания тайловой игро-промышленности, а также невообразимым ранее чувством "О слепец я, ныне прозревший осмыслением ООП сущности":)
Действительно, это очень удобно и замечательно... С недавнего времени я начал уже как-то руками создавать какие-то примитивные логические модели и простые методы обработки задач на PHP, Java и т.д. Всему виновник - BlitzMax. Конечно я вряд ли додумаюсь сделать что-то действительно полезное или хоть как-то оправдывающее мои затраты времени на изучение этого, но.. блин, как же это все интересно.... И как вы уже поняли, я не мечтаю, я не проЭктировщик и я не прыгаю выше и дальше своей жизненной предрасположенности и цели. Просто это уже становится как бы домашним хобби, среди 10-20 других:)

В общем к чему вся эта песня..
Хотелось бы получить и изучить продолжение (хотя бы теоретическое) тем урокам, а точнее - Коллизия между спрайтом игрока и другими тайлами в массиве, спрайтами и т.д.

Вот, я изучал эти вещи:
http://dimanche.ucoz.ru/publ/2-2-3
http://blitzetc.blitzmax.ru/index.php/Тайловая_игра_на_BlitzMax

Я уже поковырялся и даже переписывал несколько раз заново (дабы понять их смысл) с добавлением своим нововведений и небольших улучшений.
Сейчас получилось вот это:

Эта картинка показывает как бы смысл в целом. Еще есть конечно персонажи, бегающие как им заблагорассудится или по строгой траектории "клеточного пути" зависящего от хода игрока (прям как в ранних Ultima :-D) заданной в массиве. Но вот взаимодействия между этим всем - нет.

Может быть кто-нибудь решится на такое и сделает доброе дело. Хотелось бы получить именно уроки, продолжение замечательным "Писаниям Прозрения", чьим автором является Dimanche13.

Жека 11.01.2010 06:43

Ответ: Тайлы, коллизия между ними и другое...
 
Здарова.

Сделай класс прямоугольника, в котором будут его координаты и ширина, и пара методов типа setPos(x,y), setSize(w,h) и методы для определения пересечения с другими прямоугольниками (или кружкАми).

Потом персонажам и объектам добавь поле "габарит", которое будет типом прямоугольника, подгони его размеры по размерам спрайтов.
В методе обновления персонажей и объектов пропиши boundRect.setPos(позицияОбъектаПоХ, позицияОбъектаПоУ), чтобы габариты связать с игроком, ну а после делай проверку пересечения этих прямоугольников.

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

Про двери: можно сделать по типу триггеров, роль которых возьмут на себя расставленные в редакторе прямоугольники - рядом с дверьми. А потом ты проверяешь пересечение этих прямоугольников с прямоугольным основанием игрока, и если пересеклись, то можно что-то делать с дверью, например открыть её ключом.

А если дверь не тайловая, а как объект, то триггерный прямоугольник сделать полем класса двери, и аналогично проверять.

Manfred 11.01.2010 17:34

Re: Тайлы, коллизия между ними и другое...
 
Спасибо за ответ, смысл понятен. Я в принципе тоже думал о похожей триггерной системе игрового мира, но считал что есть метод проще, т.к. если брать те же "рогаличные" rpg ASCII видато там используется другой построчный символьный метод вывода графики.
Я в своем первом посте конечно совсем не корректно изложил то, что мне хотелось бы понять. До меня только сейчас дошло, что я в первом посте сам не знал, чего хочу. Уроки задумывались то как для платформера.
У тебя все таки принцип для более современных 2D игр, объекты в которых имеют различные формы и размеры спрайта и т.д. и соответственно тут уже целая система коллизий. Конечно возможно я и ошибаюсь, это всего лишь догадки.
А вот если смотреть гораздо раньше по времени.
Я делаю все гораздо проще (а может и наоборот:)), у меня все объекты строго 32х32 кубик, даже предметы. Т.е. грубо говоря вся программа - 32х32 клетки. .Я пошел по пути массивов, даже для объектов, вот например стандартно:
11111
10001
10001
11111
1 - стены, 0 - пол. И даже чтобы добавить например какой-то предмет, я его тоже задам в массиве, к примеру 15:
11111
101501
10001
11111

Собственно придумать как возвращать значение из массива, как бы привязать игрока к массиву (узнавать его x,y положение в массиве-уровня) до этого я совсем не могу додуматься.
Конечно этот метод может быть не совсем корректным и придется действовать по твоему совету.
Но будем пробовать все и изучать..
Кстати, по-моему этот совет хорошо пойдет на продолжение тех уроков, а меня уже со своими экспериментами куда-то в другое место течением унесло))

dimanche13 11.01.2010 18:50

Ответ: Тайлы, коллизия между ними и другое...
 
да, была как-то идея написать продолжение, как раз про коллизии в тайловом мире. Если будет время и желание, то тутору - быть. Но с первым из двух параметров пока туго, да и о сверх присутствии второго тоже сказать не могу.
А так на пальцах, там все элементарно. Надо тока знать как перевести пиксельные координаты в тайловые. Остальное, думаю, поймешь сам.

Manfred 11.01.2010 22:08

Re: Тайлы, коллизия между ними и другое...
 
Спасибо всем, кажется я все понял, как это все работает (на моем примере по типу roguelike игрушки), сегодня пришел в голову прием как перевести координаты на экране в координаты массива..
Уроки очень нужны я думаю всем. Т.к. для такой замечательной вещи как BM уроков очень мало в инете, есть только сомнительного качества заморские бумажки, а изучать чужие фреймворки и исходники довольно сложно если не понимаешь даже базовых принципов работы графики на экране. Если я сделаю что-нибудь более менее, тоже напишу урок. Мне понравилось что в уроке под авторством Dimanche13 хорошо и грамотно описаны классы, я после них начал вникать в ооп.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot