【问题标题】:Adding objects together将对象添加在一起
【发布时间】:2013-04-27 15:57:27
【问题描述】:

在我目前正在创建的游戏中,我想让它让玩家拿着枪。

现在我将枪和玩家作为一个图像,它可以工作,但将枪和玩家作为单独的图像会更好,因为现在看起来玩家从前额射击子弹,如果我将枪作为一个单独的物体将更容易使子弹从枪中射出。稍后我还将实现一个武器切换系统,这样将枪支作为单独的对象也会更容易。

问题在于,因为我使用了 AffineTransform 和 Vector2d 来旋转玩家以始终面对鼠标光标,所以我无法让它看起来总是玩家拿着枪。更多的是有时枪在玩家内部,有时看起来不错,有时枪漂浮在空中,无论是在玩家面前还是在玩家身边。

有什么简单的方法可以让枪“粘”在玩家对象的一部分上?

【问题讨论】:

    标签: java object entity 2d sprite


    【解决方案1】:

    您可能“只是”需要使用正确的锚点,例如在rotate 中。为简化此操作,假设 Gun 位图(或 Shape?)与播放器的大小相同。

    我试图在这张图中说明这一点:

    左图是玩家,右图是枪。请注意,枪图像与玩家图像具有相同的尺寸,但当然几乎是空的。红点将是旋转的锚点 - 例如在图像的中心,即使这无关紧要。如果您将枪叠加在玩家身上并使用同一个锚旋转两者,枪将始终在正确的位置。

    如果你知道你的线性代数,你当然也可以解析地解决这个问题。但我建议首先让它以你想要的方式工作,然后从那里探索更优雅的解决方案。我发现一个很好的快速阅读是这四个部分blog post。第 3 部分和第 4 部分涉及您的问题。如果您想要更全面的介绍,任何linear algebra textbook 都可以,或者您可能会喜欢这个free online course

    【讨论】:

      【解决方案2】:

      在我们的游戏中,我们通过以下帮助方法使剑和盾紧贴玩家/敌人的精灵的适当位置:

      public int getPlayerLeftHand()
      public int getPlayerRightHand()
      

      并且每次玩家被绘制时(在我们的游戏中,他总是有盾和剑)通过调用上述方法,他的剑/盾分别被绘制在他的右手/左手。实现者(玩家/敌人)决定他们的手在哪里,因此您完全不必担心它们是否旋转,您知道每次调用该方法时,实现者都会为您提供正确的坐标,在我们的例子中,通过检查他们面对的方向然后适当地移动坐标。

      或者,如果您想要更多 OOP 方法,您可以将玩家/敌人传递给武器,让他们决定如何以及在何处渲染。

      【讨论】:

        【解决方案3】:

        你可以通过累积变换矩阵来解决这个问题。

        首先,您有一个用于定位玩家的转换矩阵。接下来,您定义一个矩阵,将枪定位在未转换的玩家手中。将这两个矩阵相乘,您就得到了一个将枪放在变形玩家手中的矩阵。

        最后,当你在做的时候,写一个变换矩阵来定位子弹相对于枪管的位置。将所有三个矩阵相乘,你的子弹就在它所属的地方。

        您的 3D 图形库将有例程为您完成所有这些工作。

        但我必须直言不讳:如果你还不知道这一切,你可能已经咬得比你能嚼的多。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-06
          • 1970-01-01
          • 2021-07-14
          • 2017-01-19
          • 1970-01-01
          相关资源
          最近更新 更多