gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:44:01 25 4
gpt4 key购买 nike

我已经开发 Java 游戏几个月了,但遇到了问题。

我的玩家环境中行走,该环境由具有自己的CollisionBox的图 block 组成。简而言之:当 PlayerCollisionBox 与另一个 CollisionBox(例如盒子或其他东西)碰撞时,Player 不能移动。这部分已得到处理。

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

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

我熟悉观察者模式,其中环境可以“听到”这种碰撞,但我不太确定它是如何在这里实现的,或者即使这是正确的设计模式对于这种情况!

更简单...

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

更广泛地说:如何在两个类之间发送消息而无需层层方法/构造函数注入(inject)?

最佳答案

您听说过模型- View - Controller 模型吗?这没什么特别的,但也许能有所帮助。基本上你的程序将由三个部分组成:

  1. 模型 - 这些是您的问题中的所有斜体字,代表程序中交互组成它的部分。
  2. 查看 - 显示;与此无关,这就像事物如何绘制到屏幕上一样
  3. Controller - 我认为这会对您有所帮助。这是一个主持整个节目的类。此类控制程序的模型组件中生成的所有部分,这就是允许它们进行通信的原因。我想环境类可能适合您的情况。

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

关于java - Java 中两个远程类之间的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15648921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com