2010-05-03 53 views
2

我在xna中制作了一个坦克必须在景观上移动的游戏。 我需要能够找到坦克的底部,当它旋转时,我可以让它随着玩家越过景观而上下移动。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

不是100%清楚它到底是什么你正在尝试做的。你提到一个精灵,它是2D的,但是你的描述是3D的。如果您正在做2D侧视图,那么您无法判断坦克是否旋转了45度。如果你正在做2D自上而下的视图,那么你不应该关心tred的底部。

无论如何,有两点建议。如果您在追踪旋转像素方面苦恼不堪,请阅读creators.xna.com网站上的这篇文章:2D collision with Transformed Pixels。不过,我会建议追踪向量。使用两个矢量来表示轨道位置,然后使用Vector2.Transform来旋转坦克。然后,您可以使用这些矢量来检查轨道是否碰到某物,它们处于何种角度等等。

0

你需要为你的精灵定义一个更清晰的方向。我会使用坦克的前部和向上矢量。现在,您可以将它们两个一起旋转,并根据地形将您的坦克驱动的角度旋转。可以说这些向量是你精灵的中心。和你的精灵旋转,就像你的向上和向前的向量。现在只需将你的Halfheight乘以-Up向量,你应该拥有你的本地最低中锋,增加你的坦克位置,并且你拥有了你的世界底线位置。

重要提示:不要混淆一个点,它可以表示为一个矢量,或一个没有位置的真实矢量,只显示方向。对于方向来说,标准化矢量很重要。

对不起,模糊的答案,但你的问题也有点含糊。