示例#1
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GameStateManager.CurrentGameState == GameStateManager.GameState.Game)
            {
                IsMouseVisible = false;

                HandleInput(gameTime);

                playerSprite.Move(gameTime);

                CurrentLevel.NpcContainer.Update(gameTime);

                if (playerIsDead == false)
                {
                    // Check if player touches an enemy
                    foreach (EnemySprite sprite in CurrentLevel.NpcContainer.NPCList)
                    {
                        if (playerSprite.CollidesWith(sprite))
                        {
                            playerIsDead = true;
                            Thread.Sleep(3000);
                            GameStateManager.CurrentGameState = GameStateManager.GameState.Menu;
                            mainWindow.Show();
                            IsMouseVisible = true;
                        }
                    }
                }

                // Check the tiles the player touches
                List <Tile> tileToCheck = CurrentLevel.GetTiles(playerSprite.bounds);
                foreach (Tile tile in tileToCheck)
                {
                    if (tile != null && playerSprite.CollidesWith(tile))
                    {
                        collisionDebugString = "Player collides with tile " + tile.Position + " " + tile.TileType;
                        tile.Collision       = true;
                    }
                }

                // Make camera follow player
                int movement = (int)(playerSprite.Speed * (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000);
                camera.Speed = movement;
                camera.CenterAt(playerSprite.CenterPosition);

                // Update the HUD
                gameHUD.Update(Score.ToString(), DiamondsCollected, currentLevel.DiamondsToCollect);

                base.Update(gameTime);
            }
            else
            {
                base.Update(gameTime);
            }
        }