我一直在使用带有勾选和渲染线程的游戏循环结构来编写Java游戏。
我将用2个例子来解释我的问题。假设我们有一个World
类来保存所有实体的位置。游戏循环然后循环所有实体触发他们的update()
方法。
如果Monster
想要攻击另一个Monster
,它将如何访问其周围的其他实体列表进行攻击?如果这是通过传入一个本地实体列表来完成的,那么通过调用它的Monster
方法直接攻击另一个recieveAttack()
是否是正确的方法,或者攻击怪物触发一些更好包括与攻击相关的数据的标志。然后游戏循环也可以遍历所有这些标志并触发适当的攻击。</ p>
另一个例子是Ship
创建Rocket
但Ship
会爆炸。如果它是在Ship
类中创建的,那么该子弹如何仍然存在?
我应该如何构建我的游戏以允许这种交互?我知道在调用update()
时传递主要游戏类的解决方法,但我知道这非常粗略!
答案 0 :(得分:1)
目前游戏系统设计的一大动作是实体系统。这些允许各种复杂的交互从一组相对简单的规则中构建出来。
这是一个非常大的话题,但是有一个开源的实体系统实现可用于jME3,并且已经有一些关于实体系统如何在jME3论坛上工作的非常详细的讨论。
http://hub.jmonkeyengine.org/wiki/doku.php/jme3:contributions:entitysystem
http://hub.jmonkeyengine.org/forum/topic/my-es-in-contrib-zay-es/
论坛搜索还会找到一些其他讨论ES的线程。
即使您没有使用jME3,Zay-ES的讨论,概念和实施细节也会为您提供一个很好的介绍,让您决定这种方法是否适合您。