Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подсветка всех доступных клеток для хода (http://www.flasher.ru/forum/showthread.php?t=147075)

leofit 25.11.2010 16:32

насколько я понял имеется в виду след ситуация:

карта может выглядеть как
Код AS1/AS2:

    1 1 1 1 1 1 1 1 1 x
    1 0 0 0 1 0 0 0 0 0
    1 0 0 0 0 0 1 0 0 0
    1 0 0 1 P 0 0 0 0 0
    1 1 1 1 0 1 1 0 0 0
    0 0 0 0 0 0 1 0 0 0

где P позиция перса, x - конечная точка, 0 - клетки на которые нельзя ходить, 1 - на которые можно. Допустим данный перс может ходить на три клетки

Необходимо подсветить проходимые пути - в данном случае влево и вправо-вниз, и подсветить именно по три клетки в данном направлении, при этом клетки сверху и сверху справа учитываться не должны, я правильно понял?

-De- 25.11.2010 16:38

Волновой алгоритм (для сетки называется ещё алгоритмом Ли) вас спасёт.
Вообще это упрощённый а*, вообще не пойму как осилив а* не догадаться про волновой.

FlashWizard 26.11.2010 15:15

Я не осиливал А*, я просто взял готовый алгоритм для AS3. Я пользуюсь только массивом клеток (путь), который он возвращает.

Цитата:

Необходимо подсветить проходимые пути - в данном случае влево и вправо-вниз, и подсветить именно по три клетки в данном направлении, при этом клетки сверху и сверху справа учитываться не должны, я правильно понял?
Да так. Не объясните ?

leofit 26.11.2010 15:47

Честно говоря сложно посоветовать в данном случае что то, не зная конечной задачи, т.к. все упирается в ресурсоемкость.
Не совсем понятно для чего Вы использовали А* если персонаж обладает свободой воли и будет искать путь с помощью игрока или какого то другого фактора? В этом случае использование А* неоправданно, т.к. с каждым перемещением перса Вам придется заново искать оптимальный путь из той точки, куда он попал.

А* нужен для независимых перемещений объектов (выбрал зерга, нажал атаковать туда, и он побежал, просчитав дорогу.). Помимо этого существуют кучи оптимизаций, например, составить сетку 10х10 изо всей карты, проверить сквозную проходимость клеток (учитывая мосты, горы и реки), когда зерг достигает следующей клетки, брать эту клетку, делить её 100х100, находить путь уже там учитывая нахождение протоссов и т.п.

В вашем случае, если это что пошаговое, придется скорее всего реализовывать алгоритм Флойда (вычислять стоимость путей из каждой клетки сетки в каждую), он отработает один раз. После этого как только персонаж попал на клетку, подсвечивать окружающие клетки, стоимость перемещения по которым не превышает длины его хода, при этом учитывая возможность перемещения перса из текущей клетки в запланированную.
Мб, есть путь легче и проще, но, в моем понимании задачи, задача сложная

FlashWizard 26.11.2010 16:00

У меня пошаговая игра. Стратегия. С одной стороны танки и с другой. (свои, враги). Просто выбираем юнита и говорим идти или атаковать и всё. Мне нужно понять как подсветить все доступные для хода клетки, исходя из того на сколько клеток может ходить юнит.

-De- 26.11.2010 16:27

Да тупо там думаю - стал на точку, из точки пустил волну. Волна дальше длины хода не идёт.
Волновой алгоритм же тупой как пробка - идём из исходной клетки во все соседи. Из соседей потом тоже (но в пройденные не идём). Повторить нужное число шагов.

leofit 26.11.2010 16:30

Тогда Флойд
либо прогонять волновой несколько раз для каждого юнита
или самое простое решение:
при создании карты (создании руками, в процессе разработки) делать массив [клетка_сетки = [возможные_пути_с_этой_клетки] ], а потом тупо подсвечивать клетки из этого массива длиной хода танка. Можно также предусмотреть, что при гибели танка на какой то клетке эта клетка становится непроходимой и из массива динамически убирается. (не подумал что пересчет проходимости делать придется)
Такой подход займет больше времени при разработке и не универсален (для каждой карты придется делать свой массив), зато будет гораздо быстрее работать и без адских алгоритмов.

FlashWizard 26.11.2010 16:37

А что обязательно волновой, с AStar не получится ? :-(

leofit 26.11.2010 16:40

А* курочить надо, а если Вы его не реализовывали сами то вы ой как напоретесь с ним

FlashWizard 27.11.2010 02:23

Спасибо, понятно в общем. Положение не из лучших.


Часовой пояс GMT +4, время: 16:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.