Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中两个远程类之间的消息_Java_Game Engine_Slick2d_Class Structure - Fatal编程技术网

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

Java中两个远程类之间的消息,java,game-engine,slick2d,class-structure,Java,Game Engine,Slick2d,Class Structure,我已经在一个Java游戏上工作了几个月,现在遇到了一个问题 我的播放器在环境中走动,该环境由具有自己的碰撞框的瓷砖组成。简单地说:当玩家的碰撞盒与另一个碰撞盒(比如盒子或其他东西)碰撞时,玩家无法移动。那部分已经处理好了 我试图介绍交互式s,其中播放器如果与特定的碰撞框发生碰撞,例如楼梯或门,就会导致一些事情发生。具体来说,如果特定的*Interactivele*被点击,我希望能够转换到一个新的环境 我有转换和重画冲突映射的功能,但我不知道如何让冲突事件告诉环境(这在冲突事件的代码层次结构中并不

我已经在一个Java游戏上工作了几个月,现在遇到了一个问题

我的
播放器
环境中走动
,该环境由具有自己的
碰撞框的瓷砖组成。简单地说:当
玩家的
碰撞盒
与另一个
碰撞盒
(比如盒子或其他东西)碰撞时,玩家无法移动。那部分已经处理好了

我试图介绍
交互式
s,其中
播放器
如果与特定的
碰撞框
发生碰撞,例如楼梯或门,就会导致一些事情发生。具体来说,如果特定的*Interactivele*被点击,我希望能够转换到一个新的
环境

我有转换和重画冲突映射的功能,但我不知道如何让冲突事件告诉环境(这在冲突事件的代码层次结构中并不方便)

我熟悉Observer模式,在该模式中,
环境
可以“听到”这种冲突,但我不确定它将如何在这里实现,甚至不确定这是否是适合这种情况的设计模式

更简单地说

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


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

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

  • 模型-这些都是你问题中的斜体字,代表程序中相互作用的组成部分
  • 视图显示;与此无关,这就像事物是如何被绘制到屏幕上的
  • 控制器-这是我认为会帮助你的。这是一个主持整个演出的班级。这个类控制在程序的模型组件中生成的所有部件,这就是允许它们进行通信的原因。我想在你的情况下,环境课可能对这方面有好处
    您的控制器类可能包含数组/数组列表,其中包含游戏期间生成的所有部分,如碰撞框。每个CollisionBox(我只是以它为例)都可以有一个实例变量(可以称为id)来表示它在数组中的位置(可以像索引一样简单,一个int)。当两个框发生冲突时,您可以调用控制器类中接受这两个ID的方法,这些ID可以方便地引用它们在数组中的位置。当然,您可以使用其他数据结构,但我希望这能为您提供基本的想法

    为什么不创建另一个包含公共静态方法的类,这样玩家和环境都可以访问它呢?