在我正在制作的游戏中,我想制作它以便玩家持枪。
现在我把枪和玩家作为一个图像并且它可以工作但是将枪和玩家分开是一个单独的图像会更好,因为现在看起来玩家从它的前额射出子弹,如果我将枪作为一个单独的物体,将更容易使子弹射出枪。我稍后还将实施一个武器切换系统,这样就可以更容易地将枪支作为单独的物体。
问题在于,因为我使用了AffineTransform和Vector2d来旋转玩家以始终面向鼠标光标,所以我无法设法使其始终看起来像玩家持枪。更有甚者,有时枪在玩家内部有点,有时它看起来很好,有时枪在空中漂浮,无论是在玩家的前方还是在玩家的侧面。
有什么简单的方法可以让枪“粘住”玩家对象的一部分吗?
答案 0 :(得分:2)
您可能“只是”需要使用正确的锚点,例如rotate
。为了使这更容易,想象一下Gun位图(或Shape
?)与玩家的大小相同。
我试图在这张图中说明:
左图是播放器,右图是枪。请注意,枪支图像与玩家图像具有相同的尺寸,但当然几乎是空的。红点将成为旋转的锚点 - 例如在图像的中心,即使这无关紧要。如果您将喷枪叠加在播放器上并使用相同的锚点旋转,则喷枪始终位于正确的位置。
如果你知道你的线性代数,你当然也可以解析这个问题。但我建议先让它以你想要的方式工作,然后从那里探索更优雅的解决方案。我发现一个很好的快速阅读是这四部分blog post。第3和第4部分涉及到您的问题。如果您想要更详尽的介绍linear algebra textbook会做什么,或者您可能会喜欢这个free online course。
答案 1 :(得分:0)
在我们的游戏中,我们通过像下面的帮助方法那样使剑和盾牌坚持玩家/敌人精灵的合适位置:
public int getPlayerLeftHand()
public int getPlayerRightHand()
每当玩家被吸引时(在我们的游戏中他总是有盾牌和剑),他的剑/盾分别通过调用上述方法在他的右手/左手上绘制。实现者(玩家/敌人)决定他们的手在哪里,所以你不必担心它们是否被旋转,你知道每次调用方法时,实现者都会给你正确的坐标,在我们的例子中,通过检查它们面向的方向然后适当地移动坐标。
或者,如果你想要更多的OOP方法,你可以将玩家/敌人传递给武器并让他们决定他们想要渲染的方式和位置。
答案 2 :(得分:0)
您可以通过累积转换矩阵来解决此问题。
首先,你有一个定位玩家的转换矩阵。接下来,您定义一个矩阵,将枪定位在未转换的播放器的手中。将两个矩阵相乘,你就可以将枪支放在变形玩家的手中。
最后,当你在它的时候,写一个变换矩阵,将子弹相对于枪管定位。将所有三个矩阵相乘,你的子弹就在它的所在位置。
您的3D图形库将有例程为您完成所有这些。
我必须直言不讳:如果你还不知道这一切,那么你可能已经咬过的东西比你可以咀嚼的还多。