我正在xna中制作游戏,坦克必须在景观中移动。 我需要能够在旋转时找到坦克的底部,这样当玩家越过风景时我可以让它上下移动。
例如,如果我的左上角为400,300处有一个精灵,我围绕其中心围绕其中心旋转45度,我如何找到底部轨迹的新位置。
由于
感谢Langaurd的回复。
之前我查看了文章链接,但没有理解它是如何工作的。
我正在进行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));
但这给了我一些奇怪的价值
答案 0 :(得分:0)
不是100%明确你正在尝试做什么。你提到了一个精灵,它是2D,但你的描述是用3D术语表示的。如果您正在进行2D侧视图,那么您无法分辨坦克是否旋转了45度。如果您正在进行2D自上而下的视图,那么您应该不关心tred底部的位置。
无论如何,有两个建议。如果您在跟踪旋转像素时顽固不化,请阅读creators.xna.com网站上的这篇文章:2D collision with Transformed Pixels。但是我建议跟踪矢量。使用两个向量来表示轨道位置,然后使用Vector2.Transform将其与坦克一起旋转。然后你可以使用向量来检查轨道是否有东西,它们处于什么角度等等。
答案 1 :(得分:0)
您需要为精灵定义更清晰的方向。我会使用Front和Up Vector作为坦克。现在,根据地形,您可以将它们与坦克驱动的角度一起旋转。让我们说这些向量是你的精灵的中心。并且你的精灵旋转,就像你的向上和向前矢量一样。现在只需将你的Halfheight与-Up矢量相乘,你应该拥有你的本地底部中心,添加你的坦克位置,你就拥有了世界最低的位置。
重要事项:不要混淆一个点,可以用矢量表示,也可以是一个没有位置且只显示方向的真实矢量。对于方向,重要的是规范化矢量。
对于模糊的回答感到抱歉,但你的问题也有点模糊。