lentinant, ага, понял тебя. Действительно, стоимость переходов зависит от ранее пройденного пути. Но это всего лишь означает, что стоимость переходов из текущей точки в четыре соседних нужно просто будет рассчитывать заново, а не брать из заранее просчитанного массива. Не нужно вселенную параллельных графов делать, всё равно веса нужны только для расчета перехода из текущей точки в соседние. Достаточно для каждой точки волны хранить состояние максимум четырёх соседей.
Попробую на примере:
Пускаем первую волну, игрок стоит в точке А. Волна состоит из двух соседних точек. Путь в точку B стоит 1 поворот + 1 переход. Путь в точку D тоже стоит один поворот + 1 переход. Пишем в результирующую матрицу переходов: AB - 2, AD - 2. При этом для каждой из конечных точек запоминаем состояние всех соседних клеток (максимум 4, целый граф не нужен, т.к. альтернативные пути не должны и не влияют друг на друга - они все будут менять исходное состояние карты).
Теперь из каждой точки первой волны запускаем по новой волне.
Волна из точки B имеет всего одну незадействованную ранее точку - C. Стоимость перехода из уже повёрнутой к игроку B в С теперь 3 поворота + 1 переход (стоимость считали исходя из сохранённого ранее положения соседей точки B). Пишем в результирующую матрицу: BС - 8 (стоимость пути до B + стоимость перехода).
Волна из точки D также имеет одну незадействованную точку - С. Стоимость перехода из уже повёрнутой D в С теперь 1 поворот + 1 переход. Пишем в результирующую матрицу: DC - 4 (стоимость пути до B + стоимость перехода).
Волны пришли в конечную точку, поиск окончен. Теперь собираем оптимальный путь идя от C в обратную сторону и выбирая переходы с наименьшими весами: CD (4) - DA (2). Итого, самый дешевый путь: ADC.
Тут не рассмотрена ситуация когда один и тот же переход попадает в два пути - тут логика такая, если мы пишем в результирующую матрицу переходов значение, а там уже записано более дешевая стоимость пути, то ничего не пишем, т.к. наш вариант хуже.
Но ведь, в процессе первого же перехода мы меняем параметры комнат, а значит, меняем вес некоторых ребер нашего графа. Обычные алгоритмы поиска пути тут не подходят.
Именно обычные и подходят. Поиск в ширину с учётом веса рёбер. Классическая задача.
awesomesk1ll, я о прыжке, который нельзя скорректировать в воздухе. В старых игрухах такой иногда встречался. Т.е. если ты нажал кнопку прыжка и выбрал направление, то персонаж пока прыжок не закончит (обычно в пропасть) управления не слушается.
Прыжок не должен ни как работать если персонаж в воздухе
Ты пробовал играть в игры с неуправляемым прыжком? Это дыбом волоса, вот что я скажу. Выбешивает до пара из ушей. Братья Марио смотрят на тебя с укором. :)
Ох, стрёмно это. Cегодня они есть, а завтра нет, или зарефакторят им другую логику работы, интерфейс сменят. . К тому же медленней прямых вызовов на несколько порядков.
Что там в юнити такого полезного от любопытных спрятали?
lentinant, конечно не должны все враги ломиться на игрока. Только самые злобные и агрессивные. Это фишка, когда все враги простые и рандомные, а некоторые, особо опасные, агрессивно ищут игрока. Враги в виде яблонь, которые хочешь обстучал, а хочешь мимо пошел не делают вызова, разве что плотной толпой встанут на пути.
Они не могут целенаправленно искать игрока? о_О Повышение сложности через преследование и агрессию игрока - это более мягкий и интересный путь, чем тупо накручивать врагам хелсы.
По идее, поиск пути не должен отличаться от обычного. Тут небольшая матрица ячеек, возможность перехода из ячейки к соседям фиксирована, цена зависит от её положения. Перед каждым расчетом нужно строить граф уровня, цена перехода из узла в узел рассчитывается как количество поворотов, требуемых для перехода. А дальше классический поиск в ширину, никаких наворотов типа A* не нужно, размер матрицы крошечный.
Если что - могу поделиться кодом поиска пути на C++.
Using feature levels, you can develop an application for Direct3D 9, Microsoft Direct3D 10, or Direct3D 11, and then run it on 9, 10 or 11 hardware (with some exceptions of course, new 11 features will not run on an existing 9 card for example).
Если на компе нет DirectX11 то игруха работать не будет. Эта фишка для того, чтобы DirectX11 работал на видеокарточках разработанных для более старых версий DirectX, при этом программное обеспечение должно быть новым. Чуда, увы, не происходит, просто для старого железа DX11 подсовывает старую реализацию старых плюшек, которые были в нём переработаны.
Fakov, ещё плавную индикацию подготовки заряда у пушки сделай - у игрока станет точнее контроль за временем фриза. Мне кажется это очень важно для ощущения полного контроля над персонажем.
MaJo, ну, когда-нибудь перейду и на более поздние директы (хотя скорее всего на OpenGL), но пока в этом нет необходимости - я не использую ничего такого модного и ультрасовременного. Спрайты, блендинг + один шейдер размытия на весь проект.
Hate, darkowlom, ага, была такая штука, пофиксил в новой версии. Там профиль по умолчанию подгружался когда его не просили.
H, alexprey, в 9DХ всё ручками, фулскрин тоже руками переключается и при этом нужно не только все ресурсы перегрузить, но и окно пересоздать. Как это сочетается с тем, что если в системе более новый директикс, то более старые им эмулируются, я не знаю.
A lost device must re-create resources (including video memory resources) after it has been reset.
Возможно в десятом и выше как-то проще с этим. Но мне приходится перезагружать всю графику при потере устройства.
В любом случае, я допинал проблему. :) Теперь осталось самому пройти несколько раз демо-уровни, дописать один саундтрек (для уровня с гонками) и записать демо-видос. Думаю за завтра-послезавтра управлюсь.
Сейчас ещё поиграл. Неудобно, что нельзя кликнуть по дальней клетке чтобы туда перейти, только по смежной. Можно не делать полноценный поиск пути, а просто выбирать из ближайших ту клетку, которая по расстоянию из центра ближе к той, куда кликнул игрок.
Ред. Kozinaka
» lentinant'ов блог / Симулятор истребителя скелетов
» lentinant'ов блог / Симулятор истребителя скелетов
Ред. Kozinaka
» Color Escape 2 / Релиз!
» Color Escape 2 / Релиз!
» Программирование / Упрощенная рефлексия
Ред. Kozinaka
» MaJoFinger Blog / Плазменная пушка "Рок"
» MaJoFinger Blog / Loner
» [Gameboom] -40 / [Gameboom] -40
Ред. Kozinaka
» [Gameboom] Морозный удар: Борода решает / [Gameboom] Морозный удар: Борода решает
ОХОХОХ, где мой дробовик? :)
» Программирование / Упрощенная рефлексия
» Ootahice / [видео] Tech Демонстрация (1 неделя)
» lentinant'ов блог / Симулятор истребителя скелетов
» lentinant'ов блог / Симулятор истребителя скелетов
» Несыть / Несыть
Ред. Kozinaka
» Несыть / Несыть
Ред. Kozinaka
» Несыть / Несыть
Ред. Kozinaka
» Color Escape 2 / Релиз!
» Ootahice / Логотип
» Color Escape 2 / Релиз!
» Lo of the Dark / 0.6 - няшные пиявки!
» Несыть / Несыть
Ред. Kozinaka
» Несыть / Несыть
» Несыть / Несыть
» Несыть / Несыть
» lentinant'ов блог / Симулятор истребителя скелетов