-2

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

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

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

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

4

3 回答 3

2

您可能“只是”需要使用正确的锚点,例如在rotate. 为了使这更容易,假设 Gun 位图(或Shape?)与播放器具有相同的大小。

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

旋转锚

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

如果你知道你的线性代数,你当然也可以解析地解决这个问题。但我建议首先让它以你想要的方式工作,然后从那里探索更优雅的解决方案。我发现一个很好的快速阅读是这篇由四部分组成的博客文章。第 3 部分和第 4 部分涉及您的问题。如果您想要更全面的介绍,任何线性代数教科书都可以,或者您可能会喜欢这个免费的在线课程

于 2013-04-27T16:05:49.507 回答
0

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

public int getPlayerLeftHand()
public int getPlayerRightHand()

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

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

于 2013-04-27T16:04:09.627 回答
0

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

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

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

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

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

于 2013-04-27T16:06:28.287 回答