我正在制作一个安卓游戏(Java),所以我基本上有一个名为“敌人”的类。我在游戏类中有一系列敌人物品,还有一个游戏环,可以渲染和更新敌人的物理特性。当我想创造超过1个敌人时,问题就出现了,因为众所周知,我们在游戏中遇到了几种敌人的变化。例如,我可能有一个快速的敌人和一个具有高攻击力的敌人,或者一个是士兵而另一个可能是狼。
结合不同类型敌人的有效方法是什么?如果我要创建一个新的敌人类,我必须在游戏循环中创建另一个循环来更新和渲染它,这将是非常低效的,尤其是数百个。而且我不确定你是否要将它们全部定义在一个类中,因为它看起来不太好并且你最终得到一个很长的列表。我知道我应该构建它的方式是让敌人扩展暴徒,这也扩展了一个实体类,但我只是混淆了它是如何工作的,如何组织它并有效地完成它。从其他代码中,我看到人们使用id并分别为新敌人创建类。
作为初学者,我应该担心这是如何构建的?我在哪里可以了解这应该如何工作的基础知识?感谢。
答案 0 :(得分:1)
对于构建一切的基本,简单的方法,你基本上有正确的想法。有一个基础“实体”类,您希望所有实体都具有逻辑,渲染等等。举个简单的例子,这个类看起来像这样:
public interface Entity {
public void tick(float timeDelta);
public void draw(Graphics2D g); // Don't remember what Android uses to draw, so I stuck with a Graphics2D here
}
然后,创建的所有实体对象将被卡在某个列表中,并且每个帧都需要进行勾选,然后绘制调用的方法。 Here是一个用许多例子详细讨论游戏循环概念的地方,包括Java代码。
为了进一步阅读,有一个series of blog entries基本上来自作家运行的游戏设计课程。我自己没有时间阅读所有内容,但希望它能为您提供一些概念。
This文章还讨论了一种稍微更先进(但非常有用)的方式来处理游戏中的实体。它基本上将实体的实际概念与实体行为的概念分开,允许您将不同的行为附加到同一个基类以创建新的东西。我会将其归档并稍后了解它。在您担心在游戏背后构建更大的架构之前,获取构建游戏的基本概念(可能通过制作俄罗斯方块克隆!)。还有一个StackOverflow question,它有许多关于这种在游戏中组织实体的方式的链接。
我只想采用“实体是实现实体接口的东西,存在于我可以迭代的列表中”的基本思想,并立即运行它。把东西放在一起,制作一两个简单的游戏,阅读有关游戏循环的文章,只是玩得开心。通过这样做,您将学到很多东西,并且随着时间的推移,很可能会自然地迁移到更高级的概念。
答案 1 :(得分:0)
老实说,我不会担心有很多Enemy
个子类,但这实际上取决于你将要做什么样的自定义。如果你有多个敌人以相同的方式运作但只是看起来不同,那么在该类中只有一个属性可能包含要使用的图形。但是,如果敌人具有不同的功能,将它们分成自己的类可能更有意义。当然你不会有超过10-15种不同类型的敌人? (虽然有些看起来可能不同。)查看Template method pattern;维基百科页面有一个与游戏相关的例子。
您可以阅读的另一个来源是composition vs. inheritance。
“过早优化是所有邪恶的根源。”我只是让你的游戏工作,然后才开始提高性能/效率。
答案 2 :(得分:0)
您需要开始的是识别对象及其行为和它们之间的关系。
也许一个是士兵,另一个可能是狼
解决这个问题的一种典型方法是定义一个类似Enemy
的超类型,让其他人像士兵或狼一样来扩展这种类型。根据具体要求,它可以是interface
,应由不同的实现来实现。人们通常更喜欢组合继承,但每种模式都有不同的用例。
我可能有一个快速的敌人和一个具有高攻击力的敌人
这些看似敌人的属性,可以通过适当的类进行封装。
我建议您花一些时间在应用程序的初始设计中(设计类而不必过多担心性能和优化。