gpt4 book ai didi

c# - XNA 人工智能 : Managing Enemies on Screen

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:56 27 4
gpt4 key购买 nike

我有两个类,人类和怪物。

两者都有一个名为 MoveBehavior 的属性

Human有HumanMoveBehavior,Monster有MonsterMoveBehavior

我希望 HumanMoveBehavior 远离怪物,而 MonsterMoveBehavior 向人类移动。

我遇到的问题是我应该将我的代码移动到哪里?

在人类/怪物类中?

使用这种方法,我有一个 Move() 方法,它获取游戏中所有实体的列表,使用名为 GetListOfOpponents(List allsprites) 的方法确定它是怪物还是人类,然后运行 ​​GetNearestOpponent(List opposites);

但这看起来真的很乱。

我应该有一个 SpriteController 来决定 Sprites 移动到哪里吗?我不确定我需要把这段代码放在哪里:(

谢谢!

最佳答案

你可以想到一个 AIManager 只是说:

foreach(GameObject go in m_myObjects) // m_myObjects is a list of all objects that require updating
{
go.Update(); // standard GameObject function
}

之后,每个类都应该处理自己的一段代码。因此更新在类本身中起作用。

所以人类说:

// just a class which is a gameObject and also has moving behaviour
// do the same with monster
public class Human : GameObject, IMoveBehaviour
{
public override Update()
{
GoMove();
}

public void GoMove()
{
// human specific logic here
}
}

// This interface describes that some movement
// will happen with the implementing class
public interface IMoveBehaviour
{
void GoMove();
}

通过使用接口(interface),您可以将特定语言作为类的一部分,而无需另外创建一些类来为您处理。当然有可能。但在现实生活中,移动的是人类/怪物,而不是他携带的某个物体。

更新

回复评论。因为有一个 AIManager,或者甚至一个完整的 GameObjectManager 都可以很好地维护所有 GameObjects,您可以询问 AIManager为你不能去的地方。

因为寻路大部分时间是通过使用一些导航网格或指定的网格来完成的,GameObjectManager 可以返回包含所有可导航点的特定网格。你肯定不应该定义每个怪物的所有位置。因为大多数时候,怪物并不知道每个人(在现实生活中)在哪里。所以知道哪里不该去确实很好,但知道每个人都在哪里,也会给你的 AI 带来太多优势。

所以考虑返回一个网格,其中包含去哪里和不去哪里的点,而不是在怪物/人类内部维护这些东西。通过思考现实生活中的事情,始终检查您应该把什么留在哪里。

关于c# - XNA 人工智能 : Managing Enemies on Screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com