|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.07.2009, 00:59 | #1 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Графика в изометрии
Обобщил наработки построения игрового поля в изометрической плоскости.Предлагаю в виде небольшой статьи. В Приложении исходник с практическим примером использования.
Может кому то пригодится.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
22.07.2009, 11:45 | #2 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Запустил пример и в нем не понравилось что в определенных местах карты игрок телепортируется на немаленькие расстояния (движется рывками ). Статью просмотрел особо не вдумываясь но за старания +1.
Кстати а почему бы не создать тему где выкладывать различные статьи по непростым аспектам геймдева? |
22.07.2009, 15:37 | #3 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Для "быстрых" машин (свыше 1,8 ГГц) надо в коде убрать слэш коментария с задержки. Тогда движение будет плавным , без рывков
Код:
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
22.07.2009, 16:18 | #4 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Есть пожелание, оформить это в теме "Уроки по созданию игр для новичков", только как полноценную статью, разделив на части, ...будет весьма наглядно и правильно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
22.07.2009, 20:12 | #5 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Цитата:
Новая, рабочая ссылка - http://depositfiles.com/files/akgys12v5
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось DeKot; 22.07.2009 в 20:32. Причина: Не рабочая ссылка |
|
22.07.2009, 21:08 | #6 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Альтернативный вариант координат в изометрии
Вам как автору виднее, будут части или нет, возможно понадобится побольше разжевать тему и дополнить, ...все на ваше усмотрение.
А я использую привычную координатную сетку, просто спрайты имеют изометрический вид, ...и заметил еще многочисленные вычисления, которых может и не быть. Вот так:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
22.07.2009, 21:50 | #7 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Многочисленные вычисления - это только на вид кажется, если не вникать в суть.А фактически приведенные выражения не сложнее , чем например :
Form1.ClientWidth:= Form1.Left + Form1.Width; А фоновые рисунки в изометрии, понятнее описывать массивом, как бы привязанным именно к изометрической матрице.Но это, естественно, ИМХО.И как раз именно в программировании, как ни в чем другом , всегда множество альтернативных вариантов решений задач.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
22.07.2009, 22:59 | #8 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Может это имеет значение для кого-то, и если позволит автор темы, я немножко приведу рабочие альтернативные варианты.
Вот так можно сразу перевести курсор на экране в координаты карты, по методу, что уже показал выше: CellX := 1 + Trunc((MouseX - Form1.Left + {поправка по-X}) / Wp); CellY := 1 + Trunc((MouseY - Form1.Top - {поправка по-Y}) / Hp); MouseX, MouseY - это координаты курсора, как их берем не имеет значение, можно по таймеру через Mouse.CursorPos.X и Mouse.CursorPos.Y или из процедуры FormMouseMove. Form1.Left, Form1.Top - присутствуют только в том случае, если игра работает в окне, которое можно перемещать по экрану. Поправка по-X и по-Y нужна для центровки курсора в точке, ...у меня например в Windows XP и Vista значение поправок разные, почему так я не знаю, но на экране центр будет одинаковый только если правильно его выбрать. Wp и Hp - это половина размера текстуры изометрической клетки карты, соответственно, пол длины и пол высоты в пикселях. Отрисовка вообще элементарная. Вот так на задний план (сбор карты): Код:
Код:
В данном методе у персонажей 8 степеней свободы, перемещение как прямо по клеткам в изометрии, так и по-диагонали. Возможно скажите, что массив используется не рационально, ведь половина клеток остаются пустыми, ...это не совсем так, если движок универсальный, то карту можно составлять как-угодно, со сдвигами в пол клетки, с нестандартными тайлами, или записывая в них статичный объект поверхности, который никогда не меняется, но например с полупрозрачностью, чтобы придать определенный эффект, не используя дополнительные массивы для этого. Еще проще и нагляднее метода не нашел, ...вся теория, обычно рушится, под напором оптимизации. Возможно это только мне этот метод ближе.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
22.07.2009, 23:54 | #9 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Спасибо, Beermonza. Обязательно посижу просчитаю предложенные варианты расчета карты.Есть задумка написать универсальный модуль для таких случаев, надо только набраться еще практики и теории по этому вопросу. У меня так с модулем применения спрайтов получилось.Набралось информации из разных проектов, на их основе и собрал модуль.Сейчас зато просто - подключаю модуль в проект, а в самом коде пять-семь строчек вызова с параметрами и все "бегает", "стреляет"
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
23.07.2009, 00:27 | #10 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Главное - шибко не увлекаться процедурностью/функциями и модульностью в общем, иначе в один нехороший момент ваша идея универсальности превратится в DelphiX.
Первое правило - не позволять коду в "графических" циклах производить множество умножений/делений, или вызывать функцию с модуля, в которой кажется не много таких действий, но в результате в производительности можно сильно потерять или даже посадить CPU на пятую точку, были случаи по первой ))). Согласитесь, пользователю совершенно не важно в какой точке с координатами находится его персонаж, ему важно видеть, что он ткнул на карте в определенное место и персонаж туда пришел. А вот программе крайне важно, столько вычислений она при этом делает, ...чем проще вычисления, тем быстрее обработка, а хорошо бы вообще без вычислений, что, собственно, я, например, и стараюсь делать, пусть в ущерб привычному пониманию кода, и заложенной в него по началу теории классической математики и геометрии в частности.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 23.07.2009 в 00:33. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Клеточное поле в изометрии. | proglamer | HTML и CSS | 10 | 26.05.2009 01:09 |
Графика | StudentPolitech | Помощь студентам | 1 | 26.12.2008 19:13 |
графика | ben95 | Общие вопросы Delphi | 3 | 06.02.2008 22:24 |
Графика С++ | kommunist | Общие вопросы C/C++ | 6 | 14.01.2008 15:21 |
Графика | Dizman | Помощь студентам | 20 | 17.12.2007 17:03 |