我正在开发一款2D横版卷轴游戏。
描述:
我使用的是libGDX及其AI扩展。游戏将在安卓平台上发布(AI不应消耗过多的资源)。我的地形不是基于网格的,而是一个程序生成的多边形高度图(没有洞穴)。
有三种类型的敌人(NPC)——近战、远程(子弹)和混合战斗。
实体有三种移动方式——向左、向右和跳跃。有些实体还可以像图片中那样在地面上悬浮。我考虑过在离地形有一定高度的节点上进行路径规划,但如果玩家跳跃,近战敌人可能无法找到路径(我没有测试过,但我猜测会这样)。
我见过很多基于网格的游戏的例子,但没有适合我这种情况的。
请原谅我的知识不足,我刚开始接触AI开发几天前才开始的。
问题:
-
libGDX的AI是否与(几乎)无限的世界兼容?
-
我应该如何设置节点?
-
AI可以用来计算子弹的方向以击中玩家吗?
回答:
首先,我不了解libGDX,但如果你想要一个无限的世界,你需要编程实现。这意味着你需要随机生成地形,并在不需要时从内存中销毁它。如果你想无限地向左和向右移动,你需要在内存满时有效地将世界存储在硬盘上。对于你的多边形,你只需要存储节点和一些数字作为对周围元素的引用,这样你就可以让你的角色返回。
其次,因为你的游戏是二维的,路径选择非常简单,你不需要路径查找算法。因此,你不需要节点或类似的东西。你需要的是类似碰撞盒的东西,这样你的敌人就知道何时会碰撞。AI只需要知道你的角色是在左边还是右边,以及是否可以直接到达。这只是简单的几何计算。如果可以跳过其他敌人,就好像他们可以穿过敌人一样进行路径规划。
最后,子弹方向的计算只需使用线性代数来获取从你的角色到敌人的直线。你只需要计算它是否与其他敌人或地形相交,就可以知道你的角色是否会被击中。
这里唯一的AI方面是确定敌人的行为。这可以通过状态机来实现,敌人有如瞄准
、等待
、跟随
或射击
等状态。根据你的角色离多远或是否可达,状态会发生变化。