[英]xna 4.0 c# rotate a collection of images
我和我的團隊現在正在開發xna游戲。 但是,我們遇到了一個問題。 這是一個開放空間的模擬游戲,玩家可以逐個房間建造自己的飛船(俯視圖)。 每個房間都有一個texture2d,但是由於游戲是自上而下的,因此我們需要能夠“轉向飛船”。
我們在旋轉組成船的Texture2ds集合時遇到問題。 在我們的舊代碼中,我們嘗試將所有房間圍繞中心位置作為橋的位置旋轉。 遇到問題時,我們聯機查看並決定嘗試使用RenderTargets(將整個飛船繪制到RT上,然后在繪制RT圖像時旋轉它)。 我們的問題是RT會繪制一個大的紫色背景,並且由於我們的船並不一定總是完全填充矩形,因此總會有紫色背景在某處露出來。
問題是:圍繞xna中的單個原點旋轉texture2ds集合的最佳方法是什么,就像它們是單個圖像一樣?
創建一個旋轉而不是旋轉所有紋理的相機/創建一個渲染目標。 它基本上查看了精靈,而不是調整其他所有東西。
互聯網上有很多教程,但我將向您展示一些內容:
class Camera
{
public Matrix transform; // The transformed matrix
public void Update(float rotation)
{
// you can add the positions here, x y z. Play around with it.
// x should be half of the screen width,
// y the half of the screen height, creating a "orgin" where it's rotating.
transform = Matrix.CreateTranslation(0, 0, 0) * Matrix.CreateRotationZ(rotation);
}
}
將其放在Draw
方法中,它使用相機的視口: sb.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, camera.transform);
另外:我對相機的了解並不多。 但這是基本的。
您將必須找到“質心”又稱重心。 它是所有x和y坐標的平均值。 您將擁有所需的來源。
這是我之前發現的代碼,但從未經過測試...我想它也是來自stackoverflow。
Point bary = Point.Zero;
foreach (Point p in list)
{
bary.X += p.X;
bary.Y += p.Y;
}
bary.X = (bary.X + list.Count / 2) / list.Count;
bary.Y = (bary.Y + list.Count / 2) / list.Count;
return bary;
嘗試這種方式
您的問題幾乎是逐字逐句地與我直到最近遇到的完全一樣的問題。
我有一個圍繞原點旋轉的隔室(用於每個飛船),但是結果是:
我建議您回到RenderTarget方法。 要消除紫色背景,請使用:
GraphicsDevice.SetRenderTarget(render);
GraphicsDevice.Clear(Color.Transparent);
沒有隔間之間的縫隙,開銷要少得多,而且漂亮得多。
祝您和您的團隊一切順利,也許最好的太空飛船游戲就贏了;]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.