Java 封装游戏实体事件

Java 封装游戏实体事件,java,game-engine,Java,Game Engine,我一直在使用一个带有勾号和渲染线程的游戏循环结构来用Java编程游戏 我将用两个例子来解释我的问题。假设我们有一个World类,它保存所有实体的位置。然后,游戏循环遍历触发其update()方法的所有实体 例1 如果一个怪物想要攻击另一个怪物,它将如何访问周围要攻击的其他实体列表?如果这是通过传递本地实体列表来实现的,那么通过调用另一个怪物的receiveattack()方法直接攻击另一个怪物是正确的方法,还是让攻击怪物触发某种标志(包括与攻击相关的数据)更好。然后,游戏循环还可以遍历所有这些标

我一直在使用一个带有勾号和渲染线程的游戏循环结构来用Java编程游戏

我将用两个例子来解释我的问题。假设我们有一个
World
类,它保存所有实体的位置。然后,游戏循环遍历触发其
update()
方法的所有实体

例1 如果一个
怪物
想要攻击另一个
怪物
,它将如何访问周围要攻击的其他实体列表?如果这是通过传递本地实体列表来实现的,那么通过调用另一个
怪物的
receiveattack()
方法直接攻击另一个
怪物是正确的方法,还是让攻击怪物触发某种标志(包括与攻击相关的数据)更好。然后,游戏循环还可以遍历所有这些标志并触发相应的攻击

例2 另一个例子是,如果一艘
飞船
创建了一枚
火箭
,但
飞船
随后爆炸。如果此项目符号是在
Ship
类中创建的,它如何仍然存在

实际问题
我应该如何构建我的游戏以允许这种交互?我知道一些解决方法,比如在调用
update()
时传入主游戏类,但我意识到这非常粗略

目前游戏系统设计的一大趋势是实体系统。这使得各种复杂的交互都可以从一组相对简单的规则中建立起来

这是一个太大的话题,在这里无法深入讨论,但是jME3提供了一个开源实体系统实现,并且在jME3论坛上对实体系统如何工作进行了一些非常详细的讨论

在论坛搜索中,还可以找到其他一些深入讨论ES的帖子


即使你没有使用jME3,Zay ES的讨论、概念和实现细节也会给你一个很好的介绍,让你决定这种方法是否适合你。

“。通过调用它的ReceiveAttack()方法直接攻击另一个怪物是否正确”我不这么认为。它应该有一个
攻击(怪物)
方法。请注意,被攻击的
怪物
可能会选择
逃跑()我想我的意思是,一个怪物应该攻击另一个怪物,还是一个怪物应该告诉世界它想攻击另一个怪物。“一个怪物应该告诉世界”鉴于任何一个怪物对“世界”几乎没有影响,我会说:a)世界不会掷硬币。B) 使用另一种方法。