2012-03-03 8 views
0

私がやっていることは、XNA GamePage.xamlからSilverlightの他のページにリダイレクトすることです。XNAページからSilverlightのページにリダイレクトする方法は?

たとえば、プレイヤーの人生がなくなると、「GAME OVER」というテキストのSilverlightページを表示したいとします。どうやってやるの?私はonUpdateメソッドでこれを試しました:

if(lifes == 0) 
{ 
    SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(false); 
    timer.Stop(); 
    NavigationService.Navigate(new Uri("/GameOverPage.xaml",UriKind.Relative)); 
} 

これは私に間違いを常に与えます。働くにはどうしたらいいですか?事前のための

感謝:)

答えて

2

これは正しい方法です!今、私たちはそれを実装するためにGame1.csにコードを追加する必要がありGameOverScreenクラスを持っていることを

public class GameOverScreen 
{ 
private Texture2D texture; 
private Game1 game; 
private KeyboardState lastState; 

public GameOverScreen(Game1 game) 
{ 
    this.game = game; 
    texture = game.Content.Load<Texture2D>("GameOverScreen"); 
    lastState = Keyboard.GetState(); 
} 

public void Update() 
{ 
    KeyboardState keyboardState = Keyboard.GetState(); 

    if (keyboardState.IsKeyDown(Keys.Enter) && lastState.IsKeyUp(Keys.Enter)) 
    { 
     game.StartGame(); 
    } 
    else if (keyboardState.IsKeyDown(Keys.Escape) && lastState.IsKeyUp(Keys.Escape)) 
    { 
     game.Exit(); 
    } 

    lastState = keyboardState; 
} 

public void Draw(SpriteBatch spriteBatch) 
{ 
    if (texture != null) 
     spriteBatch.Draw(texture, new Vector2(0f, 0f), Color.White); 
} 
} 

GameOverScreenクラス

の実装:

は、クラスGameOverScreenを作成します。

まず、新しい画面の変数が必要です。

case Screen.GameOverScreen: 
if (gameOverScreen != null) 
    gameOverScreen.Update(); 
break; 

:Game1クラスの最上部には、我々はGameOverScreenためGame1.Update()メソッドにswitch文にケースを追加する必要が新しい

GameOverScreen object: 
StartScreen startScreen; 
GamePlayScreen gamePlayScreen; 
GameOverScreen gameOverScreen; 

次を追加そして、我々は同じドローのための()メソッドを行う必要があります:今、私たちが必要

case Screen.GameOverScreen: 
if (gameOverScreen != null) 
    gameOverScreen.Draw(spriteBatch); 
break; 

をGamePlayScreenを閉じてGameOverScreenを開くEndGame()メソッドを追加します。これは、ゲームオーバー条件が満たされたときに呼び出されます。

public void EndGame() 
{ 
gameOverScreen = new GameOverScreen(this); 
currentScreen = Screen.GameOverScreen; 

gamePlayScreen = null; 
} 

一つのマイナーチェンジでは、同様StartGame()メソッドに行われる必要があります。 GameOverScreenでは、StartGame()メソッドを呼び出すゲームを再起動するオプションをユーザーに与えます。ですから、StartGame()メソッドの最後では、gameOverScreenをnullに設定するコードを1行追加するだけです。条件

私たちが行う必要がある最後の事以上

gameOverScreen = null; 

ゲームはGamePlayScreenクラスで処理される条件ゲームオーバー、の世話をします。 GamePlayScreen.csを開きます。たとえば

int lives = 3; 

この値は、である必要はありません 私たちはここに必要がある最初の事は、プレイヤーは、クラスの先頭にこれを追加しました命の量を保持する新しい整数3、もちろんあなたが好きなものに変更することができます。 次に、ケーキのスライスが画面の下から外れて取り除かれるたびに、デクリメントするためのコードを追加する必要があります。 livesが0の場合、Game1.EndGame()が呼び出されます。このコードはHandleFallingCake()メソッドに追加されます。

if (toRemove.Count > 0) 
{ 
foreach (Sprite cake in toRemove) 
{ 
    cakeList.Remove(cake); 
    --lives; 
    if (lives == 0) 
     game.EndGame(); 
} 
} 
1

私はそれは、例えばゲームの使用を終了するには...正しくありません...あなたは「ゲーム」ページに「移動」メソッドを使用することができるとは思わない:

protected override void Update(GameTime gameTime) 

{ 

// Allows the game to exit 

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) 

this.Exit(); //this 

// TODO: Add your update logic here 

base.Update(gameTime); 

} 
+0

this.Exit();怒ったのは誰?アプリケーション全体ではなく、ゲームページから出ていくことが重要です。 – harry180

+0

新しい回答を確認する – Razor

関連する問題