【问题标题】:Encapsulating Game Entity Events封装游戏实体事件
【发布时间】:2013-12-25 22:13:08
【问题描述】:

我一直在使用带有刻度和渲染线程的游戏循环结构来用 Java 编写游戏。

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

示例 1

如果一个Monster 想要攻击另一个Monster,它将如何访问它周围的其他实体列表以进行攻击?如果这是通过传入本地实体列表来完成的,那么通过调用它的recieveAttack() 方法直接攻击另一个Monster 是否是正确的方法,或者攻击怪物触发某种标志会更好,包括与攻击相关的数据。然后,游戏循环还可以循环遍历所有这些标志并触发适当的攻击。

示例 2

另一个例子是如果Ship 创建了RocketShip 然后爆炸了。如果它是在 Ship 类中创建的,它如何仍然存在?

实际问题

我应该如何构建我的游戏以实现此类互动?我知道一些解决方法,比如在调用 update() 时传递主游戏类,但我意识到这非常粗略!

【问题讨论】:

  • "..通过调用recieveAttack()方法直接攻击另一个怪物是不是正确的方法"我不这么认为。它应该有一个attack(Monster) 方法。请注意,被攻击的Monster 可能会选择runAway() ;)
  • 我想我的意思是,一个怪物应该攻击另一个怪物,还是应该一个怪物告诉世界它想攻击另一个怪物。
  • “怪物应该告诉世界” 鉴于任何个体怪物对“世界”影响不大,我会说:A)世界不会折腾。 B) 使用其他方法。

标签: java game-engine


【解决方案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 的讨论、概念和实现细节也会为您提供很好的介绍,让您决定这种方法是否适合您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2012-05-21
    • 2011-05-05
    • 1970-01-01
    • 2011-07-17
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多