【问题标题】:Redrawing sprites in a spritebatch in xna/wp7 game在 xna/wp7 游戏的 spritebatch 中重绘精灵
【发布时间】:2011-06-09 21:34:47
【问题描述】:

我正在为 wp7 做一个小游戏,我想知道如何在 spritebatch 中重绘一个 sprite。更具体地说,在游戏结束后,如果他们点击返回按钮或在屏幕的特定区域绘制高分屏幕,则标题页将被重新绘制,他们可以在不退出游戏的情况下再次开始玩游戏。我尝试使用用于标题页的参数再次调用 spritebatch.draw(),但它只是跳过了代码,就好像它做到了,但它没有。

非常感谢。

【问题讨论】:

  • 你的问题很混乱。也许您应该发布一些代码。在这个阶段,我只能建议您使用调试器单步执行您的代码。

标签: c# windows-phone-7 xna


【解决方案1】:

我认为您需要考虑将您的逻辑进一步分离。正如前面的答案所提到的,一种常见的方法是有一种方法来管理你的游戏状态。

即 SpashScreenState、InGameState、MenuState、GameOverState

这些状态中的每一个都实现了 IGameState 或其他东西,然后将它们全部包含在某个 GameStateManager 或其他东西中,这样您就可以在任何给定时间在状态之间跳转,并且只会更新该活动状态。

如果您有透明菜单,或者希望游戏在后台继续运行而不显示游戏,这可能会有点棘手,但我相信 XNA 网站有一些关于以这种方式处理状态的教程......

让它工作的最简单方法是如下所示:

public enum GameState
{
    Unknown = 0,
    SplashScreen,
    InGame,
    Menu,
    GameOver    
}

public interface IGameState
{
    void Init();
    void Update(GameTime elapsedTime);
    void Render(GameTime elapsedTime);
    void Destroy();
}

然后有一个存储所有游戏状态的字典,然后在 XNA 主部分中有一个变量来存储当前游戏状态,然后只需将所有更新/渲染调用重定向到字典中的相关值。

这是一种非常原始的方法,但应该向您展示将其分成不同游戏状态的总体思路。这样一来,一次只能激活一个游戏状态,这意味着如果您转到菜单然后返回游戏,您将完全从上次中断的地方继续。

【讨论】:

    【解决方案2】:

    假设您使用“屏幕”方法组织代码(即[游戏状态管理])1,只需将它们重定向到标题屏幕,标题屏幕就会从那里获取。

    如果您不使用游戏状态管理,那么您需要更具体,否则,我建议您重新格式化您的代码以使用上面链接中描述的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      相关资源
      最近更新 更多