此代码用于绘制塔。广场位置是广场的左上角。 TILE_SIZE只是方形的尺寸。
SpriteBatch.Draw(TowerImage, new Rectangle(square.X * TILE_SIZE, square.Y * TILE_SIZE, TILE_SIZE, TILE_SIZE), null, Color.White, myTower.Rotation,
new Vector2(TILE_SIZE - 35, TILE_SIZE - 35), SpriteEffects.None, (float)0.0);
此代码是我确定旋转的方式
public void FaceTarget(Vector2 center, Vector2 enemyCenter)
{
Vector2 direction = center - enemyCenter;
direction.Normalize();
this.Rotation = (float)Math.Atan2(-direction.X, direction.Y);
}
我这样做的基础是:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Rotation.php
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Direction_to_Angle.php
轮换真的很奇怪,这就是它的正常表现:
但是当它旋转时它会像这样:
最后,当它向下看时,它会完全偏离路径,它不是通过它的中心旋转,但是整个图像正在移动它为什么要这样做?
只有第一张图像实际上是正确位置的塔
好像它是左上角的旋转,我不知道为什么。有人可以帮忙吗?
答案 0 :(得分:5)
显然,您的精灵正在考虑作为Vector2.Zero
(或Vector2(0,0)
)点的旋转原点。这意味着Texture2D
文件的左上角。
我看到你将Draw
方法中的原点设置为TILE_SIZE - 35
这让我想知道,这块瓷砖是70像素W / H的正方形吗?
如果用new Vector2(TowerImage.Width / 2, TowerImage.Height / 2)
替换减法会怎样?
我会给你一个this site的例子,它可以解释如何随时按照鼠标位置旋转图像:
更新方法:
MouseState mouse = Mouse.GetState();
mousePosition = new Vector2(mouse.X, mouse.Y);
Vector2 direction = mousePosition - position;
direction.Normalize();
rotation = (float)Math.Atan2(
(double)direction.Y,
(double)direction.X);
绘制方法:
spriteBatch.Begin();
spriteBatch.Draw(
rocket,
position,
null,
Color.White,
rotation,
new Vector2(
rocket.Width / 2,
rocket.Height / 2),
1.0f,
SpriteEffects.None,
1.0f);
spriteBatch.End();
检查发布的代码中旋转角度的计算方法与您的略有不同,但重要的代码是Draw
方法中原点的计算。