Java中两个远程类之间的消息

时间:2013-03-26 22:53:36

标签: java game-engine slick2d class-structure

我已经在Java游戏上工作了几个月而且我遇到了一个问题。

我的PlayerEnvironment中走来走去,CollisionBox由瓷砖组成,这些瓷砖都有自己的Player。简单地说:当CollisionBox的{​​{1}}与另一个CollisionBox碰撞时(就像一个盒子或其他东西),玩家就无法移动。那部分是照顾的。

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

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

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

更简单......

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

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

1 个答案:

答案 0 :(得分:1)

您是否听说过模型 - 视图 - 控制器模型?这没什么特别的,但也许它可以提供帮助。基本上你的程序将包含三个部分:

  1. 模型 - 这些是您问题中的所有斜体词,表示程序中包含它的交互部分。
  2. 查看 - 显示;这里不那么重要,就像把事情画在屏幕上一样
  3. 控制器 - 我认为这将对您有所帮助。这是一个运行整个节目的课程。此类控制在程序的Model组件中生成的所有部件,这是允许它们进行通信的部分。我想在你的情况下,环境类可能对此有好处。
  4. 您的控制器类可能包含数组/数组列表,其中包含游戏过程中生成的所有部分,如CollisionBoxes。每个CollisionBox(我只是用这个作为例子)可以有一个实例变量(可能称之为id)表示它在数组中的位置(它可以像索引一样简单,一个int)。当两个Box碰撞时,你可以在控制器类中调用一个带有两个id的方法,这些id会方便地引用它们在数组中的位置。当然,您可以使用其他数据结构,但我希望这能为您提供基本的想法。