我无法给出任何代码,但我可以告诉你一些事情:
首先,您需要定义该程序的目标。对于这种情况,它是让 AI 隐藏在障碍物后面,尽可能让用户和 AI 保持在相对的两侧。
接下来,您需要决定在代码中需要做什么(无需编写任何实际代码)来实现这一目标。例如:
- 我们需要确定场景的哪个“区域”被认为是“障碍物后面”
- 接下来,我们需要确定一条路径,让 AI 在不通过障碍物的情况下到达该区域。
- 最后,我们需要为此添加某种延迟,这样 AI 就不会因为用户在屏幕上移动的每个像素而不断改变主意
这本身并不是一个简单的问题,但它肯定是可以实现的,而无需付出太多的汗水。我建议您找到一种方法,即使它很慢并且需要大量代码,然后为它编写代码,最后进行改进。如果您担心细化,那么您将永远无法解决任何问题。
提示:确定一个从玩家指向障碍物中间的向量。然后,将向量乘以 2 并将其添加到玩家的位置,这会在障碍物的另一侧为您提供一个点(假设它是一个矩形)。对您获得的 x 和 y 值应用一个Math.min()
或Math.max()
限制器,以使 AI 尽可能靠近或远离障碍物。这应该是一个不错的开始!:)
更新——我决定添加一些代码!
// This assumes a few variables:
int obstacleCenterX, obstacleCenterY;
int aiX, aiY, aiWalkSpeed;
int predatorX, predatorY;
private void updateAIMovement() {
int slope_x = obstacleCenterX - predatorX;
int slope_y = obstacleCenterY - predatorY;
int destination_x = predatorX + (slope_x * 2);
int destination_y = predatorY + (slope_y * 2);
if(aiX != destination_x){
aiX += (slope_x / Math.abs(slope_x)) * aiWalkSpeed;
}
if(aiY != destination_y){
aiY += (slope_y / Math.abs(slope_y)) * aiWalkSpeed;
}
}
我根本没有测试任何东西,但我认为这可能是一条正确的道路。我本可以做很多事情来改进那个小代码片段,但我没有(例如一些触发以确保玩家在对角线移动时以真实速度移动,等等......)
希望这会有所帮助!