|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.07.2008, 11:35 | #151 |
Форумчанин
Регистрация: 27.06.2008
Сообщений: 113
|
все понял я.
как обычно, виноват я: запутался и допустил ошибки. всем спасибо. я, наверное, еще обращусь |
21.07.2008, 23:14 | #152 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Про модель юнитов
Titan123, самый верный способ не допускать ошибки - это делать код как можно понятнее, даже для себя, писать комментарии, давать названия, из которых сразу видно, что это и для чего. Даже если не это стало причиной неправильной работы программы в вашем случае, не соблюдение вышеуказанных правил вам еще о себе напомнит, когда вы будете писать проект не на десяток строк.
L_M, воу, воу, воу, не все сразу ...и ИИ, и модель юнитов, и графика, ...давайте по степени значимости. На первом месте всегда модели. Значит разбираем модель юнита (персонажа), полагаю модель мира вы уже понимаете как создается из прошлых уроков, даже готовую игрушку показали Для стратегии все аналогично, только текстурки тайлов будут изометрические или вид сверху. Модель персонажа Чтобы юнит был не один, нужно воспользоваться одномерным массивом, размер его нужно задать сразу, например (0-255) - это будет лимит "населения" в вашей стратегии. Массив создается сразу, а вот управлять его содержимым мы будем динамически. Юнит обладает рядом характеристик игровых, а так же множеством системных данных от указателей на анимацию до индексов действий. Главным остается правило: "все юниты в системе игры имеют один и тот же набор характеристик и системных данных". Для этого нам понадобится собственный тип массива: Код:
Теперь достаточно назначить тип на наш массив и модель юнита готова: Код:
продолжение следует...
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 10.06.2013 в 16:32. |
21.07.2008, 23:14 | #153 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Про модель юнитов (продолжение)
продолжение...
Вот секция управления перемещением юнитов: Код:
Что значит "прозрачные панели под здания" я не совсем понимаю, если мы рисуем в буфере, то достаточно иметь bmp-картинку здания, при загрузке указать прозрачность. Вот в принципе и все, с моделью. ИИ для стратегии Задача достаточно сложная, готового кода у меня к сожалению нет, еще предстоит разработать только для RPG, он много сложнее. Вам же нужен примитивный. Попробую объяснить на пальцах. Итак ИИ для стратегий. В него входит система поиска пути и система распознования целей. "Поиск пути" - достаточно распространенная тема, нас интересует самый простой частный случай - "дойти до точки назначения" (или до расстояния атаки), без особенностей, смотрим тут: http://www.delphikingdom.com/asp/vie...catalogid=1127 В системе распознавания целей у нас есть цикл, он перебирает всех юнитов, берет их координаты UPosX, UPosY и прибавляет/отнимает, в соответствии, обзор UScan по всем направлениям, если на карте в этом радиусе (он не совсем радиус, скорее ромб) находится цель, то передаются координаты в систему поиска пути. В случае дальней атаки предварительно отнимается/прибавляется дистанция атаки URange. Казалось бы это одна система, но поиск пути нам не нужен пока нет цели или пока не дана команда перейти в указанное место (мышкой). Как интерпретировать координаты мышки в координаты карты? ...оч. просто: Код:
Тут одно за другое цепляется, куча нюансов. Ну что, аркаду можно сказать сделали, теперь стратегию?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 10.06.2013 в 16:34. |
23.07.2008, 21:41 | #154 |
Форумчанин Подтвердите свой е-майл
Регистрация: 25.02.2008
Сообщений: 289
|
как я понял создается массив из юнитов, потом в цикле изменяются координаты каждого согласно направлению? почему используется тип packet record, а не например просто запись, или объект?
Упс...
|
23.07.2008, 21:49 | #155 |
Форумчанин Подтвердите свой е-майл
Регистрация: 25.02.2008
Сообщений: 289
|
в основном меня интересует именно модель персонажа и как "приделать" к ней графику и ИИ. графику я думаю, что смогу сделать, об этом сказано достаточно, ИИ тоже несложно, но как собрать все вместе. вы уже начали объяснять как раз то, что нужно. получается надо для всего проверять весь массив(например столкновение друг с другом это цикл огромный получиться)? да и 255 это слишком мало для стратегии(если 16 рас, то по 16 юнитов получиться)-мне кажется это будет очень долго обрабатываться. я еще не знаю что делаю - рпг в стиле диабло(аллодов) или стратегию, но принцип то там будет один и тот же?
Упс...
|
24.07.2008, 17:40 | #156 | ||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Продолжаем разбирать модель юнитов ...
Цитата:
Packet record я использую в целях экономии ресурсов, эти записи будут предварительно обработаны, и будут занимать столько памяти сколько для них требуется, в отличие от просто Record, правда чуть падает скорость, но на игре это не отразится. Применять Object вообще нет никакого смысла, никакого наследования у нас нет, строить дерево тоже не нужно, просто записи. Цитата:
ИИ непосредственно управляет записями массива юнитов, обрабатывая в цикле условия. Вспомните AOEII там лимит 200 юнитов для расы, ...у вас будет 16 массивов, причем движок будет работать только с теми, что участвуют в игре, ...как подтормаживает Империя на макс лимите все знают Так что вы пробуйте на малом, постепенно расширяйте. Разница между стратегией и RPG в плане движка невелика, они часто обе содержатся в одной и той же игре, например WarCraft.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 10.06.2013 в 16:35. |
||
26.07.2008, 22:02 | #157 |
Форумчанин Подтвердите свой е-майл
Регистрация: 25.02.2008
Сообщений: 289
|
вот столкнулся с такими проблемами:
при закрытии неправильно работает. в таймере обрабатывается графика, ну как в примерах, и при нажатии Esc Close; а в собственной процедуре close работает для файлов, и я не знаю как правильно завершить программу. сразу такой вопрос где все-таки все обрабатывать? для таймера в примере был обработчик клавиатуры, а как быть с мышью?
Упс...
|
27.07.2008, 13:33 | #158 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Друзья, понимаю что влез не в тему вообще, но у меня вопрос. Как создать физику мяча? Сделать так точнее чтобы он мог оттталкиваться от стен, скорость остаётся постоянной.
|
27.07.2008, 18:43 | #159 | ||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Не знаю как все, а если VCL, то проще обрабатывать OnKeyDown и иже с ними OnMouse для мыши на главной форме, ...тут у вас флаги меняют свои значения по нажатию с клавиатуры или мыши, а один ОБЩИЙ таймер обрабатывает флаги, задает такт ИИ и сам же им и является, готовит графику и опять таки дает команду процедуре вывода кадра на экран. Цитата:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 10.06.2013 в 16:37. |
||
27.07.2008, 22:08 | #160 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Скорость - это вектор. Реверсируем координаты вектора в зависимости от стены, от которой отталкиваемся. От вертикальных - реверс Х, от горизонтальных - реверс Y.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хорошие уроки | Render | Общие вопросы Delphi | 9 | 15.09.2012 07:13 |
Акцесс вопросы новичков | Yaga | Помощь студентам | 4 | 02.06.2008 00:16 |
Учебники для новичков в програмировании | Рар | Общие вопросы Delphi | 6 | 08.01.2007 08:07 |