Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XNA-未绘制文本_C#_Xna_Drawing - Fatal编程技术网

C# XNA-未绘制文本

C# XNA-未绘制文本,c#,xna,drawing,C#,Xna,Drawing,我有一些暂停菜单文本,当我暂停游戏时,我希望它显示出来。它没有显示,我也不完全确定为什么,这就是为什么我发布了这个问题。这是我的密码 if (!paused) { if (AccessMGame || AccessCampaign) { PlayerStatus.Update(); EntityManager.Update();

我有一些暂停菜单文本,当我暂停游戏时,我希望它显示出来。它没有显示,我也不完全确定为什么,这就是为什么我发布了这个问题。这是我的密码

            if (!paused)
        {
            if (AccessMGame || AccessCampaign)
            {
                PlayerStatus.Update();
                EntityManager.Update();
                EnemySpawner.Update();
                ParticleManager.Update();
            }
        }
        else
        {
            pauseMenuGameState = true;
        }
此代码指示游戏是否暂停,如果游戏未暂停,则更新游戏,如果将
pausemengamestate
设置为true。下面是我试图显示文本的代码

if (pauseMenuGameState == true)
        {
            Color color2 = Color.White;
            spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Additive);
            DrawCenterAlignedString("Paused", ScreenSize.Y / 2 - 100, color2);
            spriteBatch.End();
        }
最后是
DrawCenterAlignedString
函数

public void DrawCenterAlignedString(string text, float y, Color color)
    {
        var textWidth = Art.Font.MeasureString(text).X;
        spriteBatch.DrawString(Art.Font, text, new Vector2(ScreenSize.X / 2 - textWidth + textWidth / 2, y), color);

    }
注:暂停变量的偏差为
public static bool paused=false
和pause menu game state变量的声明为
公共静态bool pauseMenuGameState我已经调试了我的程序,以发现代码正在访问,并且由于某种原因没有绘制文本

我认为这些方法是造成问题的原因

private static bool _isPaused = false;

    public static void pauseMenu()
    {
        if (Input.WasKeyPressed(Keys.P))
        {
            _isPaused = true;
            GameRoot.paused = !GameRoot.paused;
        }
    }

    public static bool isPaused()
    {
        return _isPaused;
    }

据我所知,没有错误。您是否检查代码是否已到达,以及字符串的计算宽度是否正确?您应该将所有参数记录到控制台以进行调试。您还应该检查是否适用于您。

调试完我的程序后,我发现代码已到达,控制台显示精灵已绘制。另一个方法是检查spriteBatch.Begin()命令,尤其是SpriteSortMode。在MSDN示例中,调用sprireBatch.Begin()时不带参数。(虽然我可以理解,您希望它至少是可添加的,以便在现有屏幕上绘制。)。错误的另一个来源可能是文本确实正在绘制,但由于颜色或大小的原因,文本一直不可见。检查Art.Font属性以检查是否有任何错误。我发现绘制文本没有问题,但pauseMenu和isPaused函数在我的更新方法中导致了问题。当我不调用它们时,游戏会100%更新,但是draw函数总是更新。我怀疑问题出在
pauseMenu()
不太正确的地方。