我正在为游戏编写 AI 对象。
我的目标是优化代码,以便我可以同时处理尽可能多的 AI 进程。
游戏是 2d 物理游戏,所以我已经在处理碰撞处理中的实体数瓶颈问题,因此 AI 需要高效。
我正在处理的命令是简单的 ASDF + QE 移动,以及鼠标点击和定位。
我意识到,在实际的键/鼠标上模拟 AI Action 可能不是一个好主意。但我想从这里开始,稍后再将其拆解。
我决定使用 boolean 数组来表示如下命令:
//Commands: continue, up, down, left, right, turnQ, turnE, mouse0, mouse1
boolean[] moveBools = {false, false, false, false, false, false, false, false, false};
//The first boolean in the array 'continue' will terminate the loop if its true.
我正在努力解决的问题是如何将这些数据传递到实际移动物理体的函数中。我可以简单地在每个游戏迭代中传递一个完整的 boolean 数组,或者将/changes/从一个迭代传递到另一个迭代。
这种类型的编程桥接到实际的 boolean 数学,这远远超出了我的知识范围。我推测我实际上可以创建运算符,就像在 C++ 中所做的那样,让数组状态相互减去并输出结果。
问题是:在前面的上下文中,我怎样才能以最佳速度传递 boolean 数组?
最佳答案
enum Command {
continuing, up, down, left, right, turnQ, turnE, mouse0, mouse
}
void process(EnumSet<Command> commands) {
while (commands.isEmpty()) {
...
}
...
}
枚举是可能的。 EnumSet 与 BitSet 类似,EnumMap 与数组类似。
否则使用位掩码并传递一个整数。对 int 的位操作很简单,而且效率稍高。
关于Java AI - boolean 数组的最佳传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503955/