0

如果我以奇怪的方式写作,我很抱歉。对编程很陌生,第一年所以我想我可以使用一些帮助..我试图在我的小组中获得一个“结束屏幕”,我真的不知道该怎么做。我们有三个级别,在第三个也是最后一个级别之后应该会弹出一个屏幕,例如“你想再玩一次/退出吗?” 这是我的问题,我如何从简单的开始?我已经尝试过自己并在 Objects 下创建了一个名为“EndScreen”的 SpriteFont。现在后来在“draw(GameTime)”中我这样做了:

" // 绘制游戏的结束画面

        switch (CurrentGameState)
        {
            case Gamestate.EndScreen:
                {
                    spriteBatch.Draw(Content.Load<Texture2D>("Sprites/Endscreen"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
                    btnPlay.Draw(spriteBatch);
                    break; "

现在我收到错误消息:“检测到无法访问的代码”如果您能给我一些步骤,我将不胜感激。

对不起,如果它看起来很糟糕并且有一些类型错误,我住在瑞典,对编程和这个网站很陌生!我也想知道我是否正确编码并将代码放在正确的位置,我对编程非常不安全

4

2 回答 2

3

"休息后你有额外的

由于 break 会跳出 switch 语句,因此代码路径将永远无法到达这部分代码。只需删除即可解决此问题


void Update(GameTime g)
{
   CurrentGameState = GameState.EndScreen;
}
于 2014-04-09T09:07:51.763 回答
0

我不会回答你提出的问题(@sayse 已经做得很好了),而是你的代码提出的问题。

当您绘制图像时,您调用以下代码:

spriteBatch.Draw(Content.Load<Texture2D>("Sprites/Endscreen"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);

这意味着您的游戏将图像绘制到屏幕上的每一帧,它试图在“Sprites/Endscreen”处加载一个新的纹理实例。虽然 XNA 能够实现不加载它,但检查它是否已经加载的过程有点慢。您可能不会立即注意到它,但如果您在这样的屏幕绘图上获得足够多的图像,您会注意到明显的“滞后”或帧速率下降。

这个问题的一个很好的解决方案是在你的类的顶部创建一个字段(类成员变量),这个代码被调用。使它成为一个 Texture2D 并将它命名为类似 endScreen 的相关内容。然后在 LoadContent 中将纹理加载到您的 endScreen 对象中。最后更改您对 spriteBatch.Draw() 的调用以使用该 Texture2D。下面我提供了一个您可能想要做的示例。

//Fields
Texture2D endScreen;
//Load Content
endScreen = Content.Load<Texture2D>("Sprites/Endscreen");
//All Your Class Code
//Draw
spriteBatch.Draw(endScreen, new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
于 2014-04-09T12:50:39.270 回答