【问题标题】:XNA Track rotated pixel positionsXNA 跟踪旋转的像素位置
【发布时间】:2011-02-15 02:10:54
【问题描述】:

我正在 xna 中制作一个游戏,其中一辆坦克必须在地形上移动。 我需要能够在坦克旋转时找到它的底部,以便在玩家越过景观时让它上下移动。

例如,如果我有一个左上角为 400,300 的精灵,我将它围绕其中心旋转 45 度,我如何找到底部轨道的新位置。

谢谢


感谢朗高德的回复。

我之前看过文章链接,但不明白它是如何工作的。

我正在制作一个 2d 横向滚动游戏。随着玩家左右移动,坦克也必须倾斜以跟随地形的轮廓。

我有两个存储轨道后底部的向量和一个存储轨道前底部的向量。

我试过了

Vector2 backBottom = new Vector2(5, 25);
Vector2 frontBottom = new Vector2(5, 32);

backBottom = Vector2.Transform(backBottom+position, Matrix.CreateRotationZ(angle));
frontBottom = Vector2.Transform(frontBottom+position, Matrix.CreateRotationZ(angle));

但这给了我一些奇怪的价值观

【问题讨论】:

    标签: math xna 2d rotation tracking


    【解决方案1】:

    不是 100% 清楚你到底想要做什么。您提到了一个 2D 的精灵,但您的描述是 3D 术语。如果你在做一个 2D 侧视图,那么你不能告诉坦克旋转了 45 度。如果您正在做一个 2D 自上而下的视图,那么您不应该真正关心树的底部在哪里。

    无论如何,有两个建议。如果您在跟踪旋转像素方面是顽固的,那么请阅读这篇文章:来自 creators.xna.com 网站的2D collision with Transformed Pixels。但是我会推荐跟踪向量。使用两个向量来表示轨道位置,然后使用 Vector2.Transform 将它们与坦克一起旋转。然后,您可以使用向量来检查轨道是否撞到了什么东西,它们的角度等等。

    【讨论】:

      【解决方案2】:

      你需要为你的精灵定义一个更清晰的方向。我会为坦克使用 Front and Up Vector。现在,您可以根据地形将它们与坦克驱动的角度一起旋转。假设这些向量位于您的精灵的中心。并且您的精灵被旋转,就像您的向上和前向量一样。现在只需将您的 Halfheight 与 -Up 向量相乘,您就应该得到当地的底部中心,加上您的坦克位置,您就得到了您的世界底部轨道位置。

      重要提示:不要混淆点,点可以用向量表示,也可以是没有位置只显示方向的实向量。对于方向,对向量进行归一化很重要。

      抱歉,答案含糊不清,但您的问题也有点含糊。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多