将转换矩阵添加到spritebatch后,C#Draw方法不会绘制到屏幕

将转换矩阵添加到spritebatch后,C#Draw方法不会绘制到屏幕,c#,2d,monogame,C#,2d,Monogame,我一直在尝试用Monogame制作一个简单的2D游戏。我在网上找到了一个相机类的教程,可以将屏幕滚动到角色移动的地方 这是相机类: public class Camera { Vector2 position; Matrix viewMatrix; public Matrix ViewMatrix { get { return viewMatrix; } } public int ScreenWidth { get { return GraphicsDevic

我一直在尝试用Monogame制作一个简单的2D游戏。我在网上找到了一个相机类的教程,可以将屏幕滚动到角色移动的地方

这是相机类:

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));
}
当我在没有任何参数的情况下使用spriteBatch.Begin()时,标题屏幕和主菜单加载很好,后面是tilemap和播放器。 但是,当我添加Camera.Viewmatrix参数时,屏幕保持黑色。它似乎没有通过Graphicsdevice.Clear(颜色.黑色)绘制任何内容

如果您能提供任何意见,我将不胜感激。如果您需要查看更多我的代码,请告诉我

更新:我相信相机和矩阵都很好。问题在于我有很多类,例如Screenmanager、Image、Tile、Layer、TitleScreen等等,。。。所有这些都使用更新,其中大多数使用绘制方法

实际绘图由ScreenManager类的单个实例使用其draw方法进行处理,如game1.cs中所示

我怀疑它试图在开始时将矩阵应用于fadescreen/titlescreen,这会导致错误,例如无法通过黑色背景。也许是因为摄像机的位置没有球员的位置

我曾尝试为摄影机和播放器绘制方法使用单独的spritebatch.Begin(),但这当然会导致错误,即我在调用另一个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));
}
公共无效更新(矢量2播放位置)
{

如果(position.X请原谅我的潜在无知,但这不是我所做的:viewMatrix=Matrix.CreateTranslation(new Vector3(-position,0));本质上与您的建议相同:viewMatrix=Matrix.CreateTranslation(new Vector3(-playerPosition.X,-playerPosition.Y,0.0f));是的,但是你在方法的顶部进行计算,这不包括在我的代码中。请尝试单位矩阵,如果它不正确,你的矩阵是正确的。嗨,再次感谢你花时间,真的很感谢!我试图像你说的那样更改它,但结果是一样的。不幸的是,这就是我建议的矩阵,o带身份的r?我希望我能正确地理解你。我在绘图功能中使用了身份矩阵,游戏正常加载。spriteBatch.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend,null,null,matrix.Identity);当我使用viewmatrix时,同样的问题再次出现,屏幕保持黑色。
 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));
}