3 回答

TA貢獻1825條經(jīng)驗 獲得超6個贊
原點根據(jù)源矩形調(diào)整旋轉(zhuǎn)中心。(當(dāng)像null
您的情況一樣傳遞時,源矩形是整個紋理。
請記住,在涉及平移、旋轉(zhuǎn)和縮放時,順序很重要。
旋轉(zhuǎn)應(yīng)用于源矩形的平移原點,允許旋轉(zhuǎn) sprite 表的各個幀。
以下代碼應(yīng)產(chǎn)生預(yù)期的輸出:
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條經(jīng)驗 獲得超12個贊
http://www.monogame.net/documentation/?page=M_Microsoft_Xna_Framework_Graphics_SpriteBatch_Draw
為了正確旋轉(zhuǎn),你需要確保origin
是正確的,
0.5f, 0.5f
如果它是一個標準化值,要么是,要么是width / 2.0f, height / 2.0f
.
或者根據(jù)您的情況旋轉(zhuǎn)任何其他合適的角。

TA貢獻1851條經(jīng)驗 獲得超3個贊
我的兩個問題的答案在于一個錯誤:
SpriteBatch 在應(yīng)用縮放平移之前應(yīng)用圍繞原點的旋轉(zhuǎn)。
為了解釋這一點,這里有一個例子:
您有一個Texture2D
大小為(16, 16)
,并希望它在圍繞原點(等于)旋轉(zhuǎn)時填充一個(48, 48)
大小。因此,您希望最終得到一個圍繞其中心點旋轉(zhuǎn)的正方形。destinationRectangle
(destinationRectangle.Width / 2, destinationRectangle.Height / 2)
(24, 24)
首先,SpriteBatch
將旋轉(zhuǎn)Texture2D
around point (24, 24)
,因為Texture2D
尚未縮放,因此大小為(16, 16)
,將導(dǎo)致不正確和意外的結(jié)果。在此之后,它將被縮放,使其只是旋轉(zhuǎn)不佳的正方形的放大版本。
要解決此問題,請使用 (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 關(guān)注
- 148 瀏覽
添加回答
舉報