3 回答
TA贡献1825条经验 获得超6个赞
原点根据源矩形调整旋转中心。(当像null
您的情况一样传递时,源矩形是整个纹理。
请记住,在涉及平移、旋转和缩放时,顺序很重要。
旋转应用于源矩形的平移原点,允许旋转 sprite 表的各个帧。
以下代码应产生预期的输出:
spriteBatch.Draw(texture, new Rectangle((int)Position.Center.X, (int)Position.Center.Y, Width, Height), null, color, Rotation, new Vector2(texture.Width / 2, texture.Height / 2), SpriteEffects.None, 1.0f);
TA贡献2012条经验 获得超12个赞
http://www.monogame.net/documentation/?page=M_Microsoft_Xna_Framework_Graphics_SpriteBatch_Draw
为了正确旋转,你需要确保origin
是正确的,
0.5f, 0.5f
如果它是一个标准化值,要么是,要么是width / 2.0f, height / 2.0f
.
或者根据您的情况旋转任何其他合适的角。
TA贡献1851条经验 获得超3个赞
我的两个问题的答案在于一个错误:
SpriteBatch 在应用缩放平移之前应用围绕原点的旋转。
为了解释这一点,这里有一个例子:
您有一个Texture2D
大小为(16, 16)
,并希望它在围绕原点(等于)旋转时填充一个(48, 48)
大小。因此,您希望最终得到一个围绕其中心点旋转的正方形。destinationRectangle
(destinationRectangle.Width / 2, destinationRectangle.Height / 2)
(24, 24)
首先,SpriteBatch
将旋转Texture2D
around point (24, 24)
,因为Texture2D
尚未缩放,因此大小为(16, 16)
,将导致不正确和意外的结果。在此之后,它将被缩放,使其只是旋转不佳的正方形的放大版本。
要解决此问题,请使用 (texture.Width / 2, texture.Height / 2)
而不是 (destinationRectangle.Width / 2, destinationRectangle.Height / 2)
作为原点。
例子:spriteBatch.Draw(texture, new Rectangle((int)Position.X, (int)Position.Y, Width, Height), null, color, Rotation, new Vector2(texture.Width / 2, texture.Height / 2), SpriteEffects.None, 0f);
- 3 回答
- 0 关注
- 102 浏览
添加回答
举报