在xna / wp7游戏中重新绘制spritebatch中的精灵

时间:2011-01-16 06:04:08

标签: c# windows-phone-7 xna

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

非常感谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我认为你需要考虑将你的逻辑分开一点。正如之前的回答所提到的,这样做的一种常见方法是有办法管理您的游戏状态。

即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主要部分中有一个变量来存储当前游戏状态,然后只需将所有更新/渲染调用重定向到字典中的相关值。

这是一种非常原始的做法,但应该向您展示将其分成不同游戏状态的整体想法。这样一来,只有一个游戏状态可以同时处于活动状态,这意味着如果你进入菜单然后回到游戏中,你将从你离开的地方恢复。