我已经在Java游戏上工作了几个月而且我遇到了一个问题。
我的Player
在Environment
中走来走去,CollisionBox
由瓷砖组成,这些瓷砖都有自己的Player
。简单地说:当CollisionBox
的{{1}}与另一个CollisionBox
碰撞时(就像一个盒子或其他东西),玩家就无法移动。那部分是照顾的。
我正在尝试介绍InteractiveTile
,如果Player
与某个特定CollisionBox
发生碰撞(例如楼梯或门)会导致某些事情发生。具体来说,如果特定的* InteractiveTile *被击中,我希望能够转换到新的Environment
。
我具有转换和重绘碰撞贴图的功能,但我不知道如何使碰撞事件告诉 Environment (在碰撞代码的层次结构中不方便事件)。
我熟悉观察者模式,其中Environment
可以“听到”这次碰撞,但我不确定如何在这里实施,或者即使这是适合这种情况的设计模式!
更简单......
调用Player.IsCollidingWithDoorLeadingToNewEnvironment(newEnvironment)
时,应调用Environment.TransitionToNewEnvironment(newEnvironment)
,但它们在代码结构中彼此相距很远。
更广泛地说:如何在方法/构造函数注入层上没有图层的情况下在两个类之间发送消息?
答案 0 :(得分:1)
您是否听说过模型 - 视图 - 控制器模型?这没什么特别的,但也许它可以提供帮助。基本上你的程序将包含三个部分:
您的控制器类可能包含数组/数组列表,其中包含游戏过程中生成的所有部分,如CollisionBoxes。每个CollisionBox(我只是用这个作为例子)可以有一个实例变量(可能称之为id)表示它在数组中的位置(它可以像索引一样简单,一个int)。当两个Box碰撞时,你可以在控制器类中调用一个带有两个id的方法,这些id会方便地引用它们在数组中的位置。当然,您可以使用其他数据结构,但我希望这能为您提供基本的想法。