Тайлы, коллизия между ними и другое...
Доброго дня.. В первую очередь, хочу поздравить всех, читающих данную тему с Новым Годом и Рождеством Христовым. Всех земных благ вам, Уважаемые!
Во вторую очередь выражаю благодарность 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. |
Ответ: Тайлы, коллизия между ними и другое...
Здарова.
Сделай класс прямоугольника, в котором будут его координаты и ширина, и пара методов типа setPos(x,y), setSize(w,h) и методы для определения пересечения с другими прямоугольниками (или кружкАми). Потом персонажам и объектам добавь поле "габарит", которое будет типом прямоугольника, подгони его размеры по размерам спрайтов. В методе обновления персонажей и объектов пропиши boundRect.setPos(позицияОбъектаПоХ, позицияОбъектаПоУ), чтобы габариты связать с игроком, ну а после делай проверку пересечения этих прямоугольников. Помимо габаритного прямоугольника можно сделать прямоугольник основания для персонажей, там где у них ноги, и делая проверку на его пересечение можно обрабатывать взятие бонусов, а также подход к дверям и их открытие. Про двери: можно сделать по типу триггеров, роль которых возьмут на себя расставленные в редакторе прямоугольники - рядом с дверьми. А потом ты проверяешь пересечение этих прямоугольников с прямоугольным основанием игрока, и если пересеклись, то можно что-то делать с дверью, например открыть её ключом. А если дверь не тайловая, а как объект, то триггерный прямоугольник сделать полем класса двери, и аналогично проверять. |
Re: Тайлы, коллизия между ними и другое...
Спасибо за ответ, смысл понятен. Я в принципе тоже думал о похожей триггерной системе игрового мира, но считал что есть метод проще, т.к. если брать те же "рогаличные" rpg ASCII видато там используется другой построчный символьный метод вывода графики.
Я в своем первом посте конечно совсем не корректно изложил то, что мне хотелось бы понять. До меня только сейчас дошло, что я в первом посте сам не знал, чего хочу. Уроки задумывались то как для платформера. У тебя все таки принцип для более современных 2D игр, объекты в которых имеют различные формы и размеры спрайта и т.д. и соответственно тут уже целая система коллизий. Конечно возможно я и ошибаюсь, это всего лишь догадки. А вот если смотреть гораздо раньше по времени. Я делаю все гораздо проще (а может и наоборот:)), у меня все объекты строго 32х32 кубик, даже предметы. Т.е. грубо говоря вся программа - 32х32 клетки. .Я пошел по пути массивов, даже для объектов, вот например стандартно: 11111 10001 10001 11111 1 - стены, 0 - пол. И даже чтобы добавить например какой-то предмет, я его тоже задам в массиве, к примеру 15: 11111 101501 10001 11111 Собственно придумать как возвращать значение из массива, как бы привязать игрока к массиву (узнавать его x,y положение в массиве-уровня) до этого я совсем не могу додуматься. Конечно этот метод может быть не совсем корректным и придется действовать по твоему совету. Но будем пробовать все и изучать.. Кстати, по-моему этот совет хорошо пойдет на продолжение тех уроков, а меня уже со своими экспериментами куда-то в другое место течением унесло)) |
Ответ: Тайлы, коллизия между ними и другое...
да, была как-то идея написать продолжение, как раз про коллизии в тайловом мире. Если будет время и желание, то тутору - быть. Но с первым из двух параметров пока туго, да и о сверх присутствии второго тоже сказать не могу.
А так на пальцах, там все элементарно. Надо тока знать как перевести пиксельные координаты в тайловые. Остальное, думаю, поймешь сам. |
Re: Тайлы, коллизия между ними и другое...
Спасибо всем, кажется я все понял, как это все работает (на моем примере по типу roguelike игрушки), сегодня пришел в голову прием как перевести координаты на экране в координаты массива..
Уроки очень нужны я думаю всем. Т.к. для такой замечательной вещи как BM уроков очень мало в инете, есть только сомнительного качества заморские бумажки, а изучать чужие фреймворки и исходники довольно сложно если не понимаешь даже базовых принципов работы графики на экране. Если я сделаю что-нибудь более менее, тоже напишу урок. Мне понравилось что в уроке под авторством Dimanche13 хорошо и грамотно описаны классы, я после них начал вникать в ооп. |
Часовой пояс GMT +4, время: 18:56. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot