【问题标题】:Messages Between Two Distant Classes In JavaJava中两个远程类之间的消息
【发布时间】:2013-03-26 22:53:35
【问题描述】:

我已经在 J​​ava 游戏上工作了几个月,但我遇到了一个问题。

我的PlayerEnvironment 中四处走动,该Environment 由都有自己的CollisionBox 的图块组成。简而言之:当PlayerCollisionBox 与另一个CollisionBox 碰撞(比如一个盒子或其他东西),那么玩家就不能移动了。那部分已经处理好了。

我正在尝试引入InteractiveTiles,其中Player 与特定的CollisionBox(例如楼梯或门)碰撞会导致某些事情发生。具体来说,如果特定 *InteractiveTile* 被击中,我希望能够转换到新的 Environment

我有转换和重绘碰撞贴图的功能,但我不知道如何让碰撞事件告诉环境(这在碰撞的代码层次结构中并不方便事件)。

我熟悉观察者模式,其中Environment 可以“听到”这种冲突,但我不确定它会如何在这里实现,或者即使这是适合这种情况的正确设计模式!

更简单...

在调用Player.IsCollidingWithDoorLeadingToNewEnvironment(newEnvironment)时,应该调用Environment.TransitionToNewEnvironment(newEnvironment),但在代码结构中它们相距甚远。

更广泛地说:如何在没有层层方法/构造函数注入的情况下在两个类之间发送消息?

【问题讨论】:

  • 为什么不创建另一个包含公共静态方法的类,以便玩家和环境都可以访问?
  • 听众的想法?

标签: java game-engine slick2d class-structure


【解决方案1】:

您听说过模型-视图-控制器模型吗?这没什么花哨的,但也许会有所帮助。基本上你的程序将包含三个部分:

  1. 模型 - 这些是您问题中的所有斜体字,它们代表程序中相互作用以构成它的部分。
  2. 查看 - 显示;在这里没有那么重要,就像东西是如何被绘制到屏幕上的一样
  3. 控制器 - 我认为这会对您有所帮助。这是一个贯穿整个节目的课程。此类控制程序的模型组件中生成的所有部分,这就是允许它们进行通信的原因。我想在您的情况下,Environment 类可能对此有好处。

您的控制器类可能包含数组/ArrayLists,其中包含游戏期间生成的所有部分,例如 CollisionBoxes。每个 CollisionBox(我只是用这个作为例子)可以有一个实例变量(可能称之为 id),它代表它在数组中的位置(它可以像索引一样简单,一个 int)。当两个 Box 发生碰撞时,您可以调用控制器类中的方法来获取这两个 id,并且这些 id 可以方便地引用它们在数组中的位置。当然,您可以使用其他数据结构,但我希望这可以为您提供基本概念。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 2013-11-23
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多