2013-03-11 2 views
-1

Я написал игры с Game Maker, но хочу написать игру с помощью Flash-ActionScript 3.Easy AI Pathfinding Библиотека

В Game Maker это было просто иметь экземпляр символа ищет ближайший враг, поворот и движение к нему - игровой движок позаботился о тяжелом материале.

Я занимаюсь разработкой игр для развлечения в свободное время и не хочу стать экспертом по алгоритмам A * pathfinding. Я просто хочу что-то вроде:

mob.MoveToClosestEnemy(); 

Я прошу слишком много или есть библиотека, которая предоставляет такую ​​вещь?

ответ

1

В библиотеке AS3 нет встроенной библиотеки, которая будет обрабатывать все аспекты поиска пути, поэтому ваши варианты поиска будут искать стороннюю библиотеку через Google и использовать ее или написать собственный алгоритм A *.

Если вы хотите, чтобы написать свой собственный, это очень хорошее введение в первопрохождения с большим анимированный пример: http://www.emanueleferonato.com/2012/11/26/the-basics-of-pathfinding-animated-example/

Примечание: Это не простая техника, и вам нужно будет относительный опыт использования AS3, чтобы полностью понять все это.

-2

Я написал Daedalus Lib, полную библиотеку Pathfinding с открытым исходным кодом AS3, основанную на триангуляции delaunay. У вас есть все, чтобы легко создавать среду (даже использовать растровое изображение), запрашивать путь к ней, образцы путей ... Это полностью динамично, точно и быстро.

Вы можете посмотреть демо здесь: http://totologic.blogspot.fr/2013/12/introducing-daedalus-lib_19.html

Скачать источники и вики: https://code.google.com/p/daedalus-lib/

Enjoy!

ПОСЛЕ ИЗМЕНЕНИЯ:

Первое, что нужно. в то время как Game Maker - все в одном инструменте, посвященном одной задаче (создание игр), Flash - более общая форма; вы можете разрабатывать игры, но также и приложения.

Это означает, чем в Flash, у вас есть 2 вариант:

1 - Вы выбираете полную библиотеку игрового движка, который будет осуществлять отображение, физику, управление ... (и, возможно, поиск пути). Такие библиотеки существуют (Flixel, Flashpunk ...), вам просто нужно проверить их функции и выбрать наиболее подходящие для ваших нужд.

2: вы создаете собственный игровой движок. Это не значит, что вы должны закодировать все с нуля. Вы можете создавать множество библиотек, предназначенных для одиночных задач, таких как Starling для 2D-дисплея, Away3D для 3D-дисплея, Box2D для физики ... Это сложнее, потому что вы действительно должны понимать базовые концепции в библиотеках и иметь опыт работы с игровой архитектурой , но этот подход более мощный и гибкий.

Таким образом, Daedalus Lib предназначен для людей, работающих со вторым подходом. Он разработан, чтобы быть компонентом вашего собственного игрового движка; вы можете комбинировать его с Box2D и Starling, например.

Начиная с этого, я разработал Daedalus, чтобы быть простым в использовании, оставаясь гибким.

Например, вы можете придать свой дизайн уровней в Дедала Lib просто за счет использования растрового изображения, как это:

var myLevel:DDLSMesh; 
myLevel = DDLSBitmapMeshFactory.buildFromBmpData(myBitmap.bitmapData); 

Затем определяют объект, который будет играть роль вашей толпы:

var myMob:DDLSEntityAI = new DDLSEntityAI(); 
myMob.radius = 5; 
myMob.x = 132; // current x 
myMob.y = 224; // current y 

Наконец просят путь для толпы внутри вашего уровня:

var path:Vector.<Number> = new Vector.<Number>(); 
var myPathfinder:DDLSPathFinder = new DDLSPathFinder(); 
myPathfinder.entity = myMob; 
myPathfinder.mesh = myLevel; 
myPathfinder.findPath(yourGoalX, yourGoalY, path); 

AFTE r, что ваша переменная path будет содержать координаты сгенерированного пути для вашей мобы, чтобы достичь вашей цели, избегая столкновений с уровнем, определенным вами в растровом изображении. До вас, чтобы использовать эти коорды непосредственно в MovieClip через enterFrame, чтобы заставить ваш мотив двигаться на экране или использовать его, чтобы изменить скорость тела в физическом моделировании.

+0

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

+0

Запрос был «есть библиотека, которая предоставляет такую ​​вещь?». Это не был запрос на выборку кода. Поэтому я ответил, предоставив прямые ссылки на источник кода и документ. Но если у вас есть какие-либо вопросы, на которые я мог бы ответить с кодом, вы можете спросить :) – Logic

+0

@Logic Да, но, пожалуйста, имейте в виду, что этот вопрос с 2013 года больше не соответствует действующим нормам качества SO; в частности, вопросы, касающиеся библиотек, ссылок, учебных пособий и т. д., теперь рассматриваются ** вне темы **. Ваш ответ подходит к вопросу, но вопрос уже не подходит. Стандарты SO для ответов в настоящее время препятствуют новым ответам (независимо от вопроса) от простого связывания с внешним контентом, не суммируя этот контент в самом ответе. –

Смежные вопросы