FunApple | Дата: Понедельник, 08 Февраля 2016, 23:31 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Хочу сделать что-нибудь, на чем можно было бы играть в пошаговые игры, где персонажи перемещаются по локации в виде квадратной сетки, соответственно, где каждая клетка поля - если один шаг персонажа. Цель - создать логику, которая просчитывала бы и отображала возможную дальность, куда может утопать персонаж. Я сделал то, что, думал, будет хоть близко работать (наивный) Видео с работой функции Вкратце поясню: поле генерируется при старте из плит, каждой плите присваиваются переменные Xcoord и Ycoord от нуля и так далее. Схема предполагала что: при наведении на плитку активируем эвент и вводим в него переменную, указывающую, какое расстояние проверяем (кол-во клеток), в эвенте берем все плитки и у проверяем у каждой сверяем координаты X и Y относительно плитки, в которой и происходит эвент, если выполняется условие что проверяемая плитка находится на расстоянии 1 или -1 по одной из осей, и равняется нулю на другой оси, то в ней ставим булевую переменную NeedToBeChecked 1. Когда цикл закончился, то ставим булевую переменную Checked 1 в той плитке, в которой проходил эвент и устанавливаем ей другой материал (помечаем, что тут ход будет возможен), затем проверяем, остались ли еще ходы, если остались, то кастуем на все плиты, и если имеются такие, в которые установлена переменная NeedToBeChecked 1 и она еще не проходила данную проверку Checked = 0, то в ней выполняем данный эвент. Собственно, что получилось, все видно.. бяка та еще... Собственно, где кроется ошибка? И, может, есть варианты попроще сделать нечто подобное?
<глупость> Ищу новичка напарника, напарницу или небольшую команду для освоения игростроительных инструментов (гейм-дизайн, сюжет, моделирование, озвучка и т.д. желательно упор в UE) в районе Зеленограда или Солнечногорска </глупость>
Сообщение отредактировал FunApple - Понедельник, 08 Февраля 2016, 23:32 |
|
| |
giperion | Дата: Пятница, 26 Февраля 2016, 21:18 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Достаточно простая задача, только лучше делать в C++, а то блупринты раздуются непомерно, да и тормозить будет. Рекурсивный обход графа нодов, с вычислением желаемого направления через эту дичь.
Skype: sergej_1965
|
|
| |
cibergod | Дата: Понедельник, 07 Марта 2016, 00:37 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Глянь я тему замутил может поможет тебе Про сетчатые блоки как раз )
Юнный недоигродел (( но очень стремлюсь Даже сайт завел cibergod.ru Но пока особо нечем хвастать
|
|
| |
Dark_geo | Дата: Понедельник, 07 Марта 2016, 03:13 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Свои пять копеек. Т.Н. "волновой" метод - для поиска пути. Реализовывал правда на другом движке. Идея вкратце. Есть пункт А с координатами x y, пункт B - куда надо прийти. Создаем массив x,y -со значением 0. Начинаем отсчет с пункта А. Вычисляем ближайшие к А "проходимые" ячейки со значением 0 и присваиваем им значение 1 (шаг). Далее от каждой ячейки со значением 1 находим "незанятые" (со значением 0) и присваиваем им значение шага 2. Далее берем 2 и ближним присваиваем значение 3. И так до тех пор, пока ячейка не оказывается пунктом B. Или не остается ячеек со значением 0 (в этом случае путь невозможен). Если проход вообще возможен - за старт берется пункт B и вычисляется ближайшая ячейка с значением максимальный шаг-1. (Возможных путей может быть несколько, т.е. несколько ячеек с нужным значением, выбор их можно сделать случайным). Всем ячейкам (кроме выбранной) со значением шаг-1 возвращается 0. Далее от найденной ячейки (шаг-1) вычисляется ближайший квадрат со значением шаг-2 (ему значение остается, остальным 0). И так до тех пор, пока на возвращаемся к точке А. Путь найден - по ячейкам со значением 1-2-3 и т.д. В общем не одно, а несколько вычислений, но реально работает - находится кратчайший путь (их может быть несколько). В случае, если количество шагов ограничено и нужно покрасить доступные для движения квадратики, то расчет "проходимости" прерывается на максимальном шаге - все со значением больше 0 красится, остальные - нет.
|
|
| |