[英]C# Draw method does not draw to screen after adding transformation matrix to spritebatch
我一直在嘗試在Monogame中制作簡單的2D游戲。 我在網上找到了一個Camera類的教程,該教程可用於將屏幕滾動到我的角色移動的位置。
這是相機類:
public class Camera
{
Vector2 position;
Matrix viewMatrix;
public Matrix ViewMatrix
{
get { return viewMatrix; }
}
public int ScreenWidth
{
get { return GraphicsDeviceManager.DefaultBackBufferWidth; }
}
public int ScreenHeight
{
get { return GraphicsDeviceManager.DefaultBackBufferHeight; }
}
public void Update(Vector2 playerPosition)
{
position.X = playerPosition.X - (ScreenWidth / 2);
position.Y = playerPosition.Y - (ScreenHeight / 2);
if(position.X <0)
{
position.X = 0;
}
if(position.Y <0)
{
position.Y = 0;
}
viewMatrix = Matrix.CreateTranslation(new Vector3(-position, 0));
}
在Game1.cs中,我使用以下Draw方法:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend,
null, null, null, null, Camera.ViewMatrix);
ScreenManager.Instance.Draw(spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
當我不帶任何參數使用spriteBatch.Begin()時,Titlescreen和mainmenu加載得很好,隨后是tilemap和播放器。 但是,當我添加Camera.Viewmatrix參數時,屏幕保持黑色。 它似乎沒有通過Graphicsdevice.Clear(Color.Black)繪制任何內容。
我將不勝感激。 如果您需要查看更多我的代碼,請告訴我。
更新:我相信相機和矩陣都很好。 該問題與以下事實有關:我有許多類,例如Screenmanager,Image,Tile,Layer,TitleScreen等,它們都使用Update,並且大多數都是Draw方法。
如上在game1.cs中所示,實際的繪圖由ScreenManager類的單例實例使用其draw方法處理。
我懷疑它一開始就試圖將矩陣應用於漸變屏幕/標題屏幕,並且這會導致出現錯誤,例如無法通過黑色背景。 也許是因為攝像機位置沒有玩家位置?
我已經嘗試為Camera和Player的繪制方法使用單獨的spritebatch.Begin(),但這當然會導致錯誤,我在另一個結束之前調用了新的spriteBatch.Begin。
我覺得這是可以解決的,但我可能盯着它看太久了,現在看不到解決方案。
我不想將其轉變為“查看我的整個項目並為我修復”,但是如果有人意識到這種情況並提出了意見,甚至遇到了同樣的事情並修復了它,我將非常感謝您反饋。
另外,如果有人需要更多代碼來查看。 隨時讓我知道。
嘗試向其提供一個身份矩陣。 那應該起作用,並且可以確認矩陣一定有問題。 自從我這樣做已經有一段時間了,但是它認為這可行。
public void Update(Vector2 playerPosition)
{
if(position.X <0)
{
position.X = 0;
}
if(position.Y <0)
{
position.Y = 0;
}
viewMatrix = Matrix.CreateTranslation(new Vector3(-playerPosition.X, -playerPosition.Y, 0.0f));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.