예제 #1
0
        private void UpdateInput()
        {
            // cremos los objetos que recogerán el estado del teclado y del mando XBox (método polling)
            KeyboardState keystate    = Keyboard.GetState();
            GamePadState  gamePadSate = GamePad.GetState(PlayerIndex.One);

            //Recogemos los inputs de la posición de la nave //////////////////

            if (keystate.IsKeyDown(Keys.W) || gamePadSate.DPad.Up == ButtonState.Pressed)
            {
                playerShip.Acelerar();
            }

            if (keystate.IsKeyDown(Keys.S) || gamePadSate.DPad.Down == ButtonState.Pressed)
            {
                playerShip.Retroceder();
            }

            if (keystate.IsKeyDown(Keys.A) || gamePadSate.DPad.Left == ButtonState.Pressed)
            {
                playerShip.GirarIzquierda();
            }

            else if (keystate.IsKeyDown(Keys.D) || gamePadSate.DPad.Right == ButtonState.Pressed)
            {
                playerShip.GirarDerecha();
            }
            else
            {
                playerShip.Enderezar();
            }

            //Inputs para los disparos ///////////////////////////
            if (gamePadSate.Buttons.A == ButtonState.Pressed || gamePadSate.Triggers.Right >= 0.5f || keystate.IsKeyDown(Keys.P))
            {
                if (buttonFireDelay <= 0.0f)
                {
                    FireBall shot = new FireBall(playerFireBallTexture, new Vector2(playerShip.Posicion.X, playerShip.Posicion.Y - 10.0f), 300.0f);
                    playerFireBallList.Add(shot);
                    laser.Play();

                    buttonFireDelay = 0.20f;
                }
            }
        }
예제 #2
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)
        {
            float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

            //Control del delay para el canal alpha de las fuentes
            mFadeDelay -= gameTime.ElapsedGameTime.TotalSeconds;
            if (mFadeDelay <= 0)
            {
                //Reseteamos el delay del efecto
                mFadeDelay = .035;

                //Aumentamos o disminuimos el valor del tiempo del efecto
                mAlphaValue += mFadeIncrement;

                //Controlamos el máximo y el mínimo del valor para el canal alpha
                if (mAlphaValue >= 255 || mAlphaValue <= 0)
                {
                    mFadeIncrement *= -1;
                }
            }

            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }
            if (gameState == GameState.StartScreen || gameState == GameState.EndScreen)
            {
                if (!gameIntroMusic)
                {
                    MediaPlayer.Play(introTheme);
                    MediaPlayer.IsRepeating = true;
                    gameIntroMusic          = true;
                }

                UpdateSplashScreen();
            }
            else // El juego está activo
            {
                timeIntructionText -= (float)gameTime.ElapsedGameTime.TotalSeconds;

                if (!gameSongStartedPlaying)
                {
                    MediaPlayer.Stop();
                    MediaPlayer.Volume = 1.0f;
                    MediaPlayer.Play(music);
                    MediaPlayer.IsRepeating = true;
                    gameSongStartedPlaying  = true;
                }
                //Intervalo de tiempos para las explosiones
                totalTimeSpan += gameTime.ElapsedGameTime;
                particleSystem.Update(totalTimeSpan, gameTime.ElapsedGameTime);
                playerShipExplotion.Update(totalTimeSpan, gameTime.ElapsedGameTime);

                spaceBackground.Update(gameTime);
                spaceBackground2.Update(gameTime);
                spaceBackground3.Update(gameTime);
                // TODO: Add your update logic here //////////
                UpdateInput(); //Actualización de los input de los controles
                playerShip.Update(gameTime);

                //aplicamos el retraso en el polling de los disparos
                //float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
                buttonFireDelay -= elapsed;


                //actualizamos la posicion de los disparos de la nave
                for (int i = 0; i < playerFireBallList.Count; i++)
                {
                    playerFireBallList[i].Update(gameTime);
                    if (playerFireBallList[i].Position.Y < -100.0f) //Eliminamos el objeto de la lista cuando sale de pantalla
                    {
                        playerFireBallList.RemoveAt(i);
                    }
                }

                //Actualizamos la posicíon de los enemigos y de los disparos

                for (int i = 0; i < enemyShipList.Count; i++)
                {
                    enemyShipList[i].Update(gameTime);
                    if (enemyShipList[i].Firing)
                    {
                        FireBall fireball = new FireBall(enemyFireballTexture, new Vector2(enemyShipList[i].Position.X + 10.0f, enemyShipList[i].Position.Y + 30.0f), -300.0f);
                        enemyFireballList.Add(fireball);
                        enemyShipList[i].Firing = false;
                    }

                    // Colisión de los disparos del jugador con los enemigos y de las naves con el jugador
                    if (enemyShipList.Count > 0) //De momento nos aseguramos de que haya al menos un enemigo en lista
                    {
                        int collide = enemyShipList[i].CollisionBall(playerFireBallList);

                        if (collide != -1)
                        {
                            particleSystem.AddExplosion(enemyShipList[i].Position * new Vector2(1.0f, 1.2f));
                            enemyShipList.RemoveAt(i);
                            playerFireBallList.RemoveAt(collide);
                            points += 200;
                            explosion.Play();
                        }
                        else
                        {
                            if (!playerShip.RecoveringActive) //Controlamos si la nave acaba de ser destruida
                            {
                                if (playerShip.CollisionTest(enemyShipList[i].Position, enemyShipList[i].Radius))
                                {
                                    particleSystem.AddExplosion(enemyShipList[i].Position * new Vector2(1.0f, 1.1f));
                                    playerShipExplotion.AddExplosion(playerShip.Posicion);
                                    enemyShipList.RemoveAt(i);
                                    explosion.Play();
                                }
                                else if (enemyShipList[i].Position.Y > 900.0f) //eliminamos los enemigos que salen por debajo sin colisionar
                                {
                                    enemyShipList.RemoveAt(i);
                                }
                            }
                        }
                    }
                }

                //Colisión de los disparos enemigos con el jugador
                for (int i = 0; i < enemyFireballList.Count; i++)
                {
                    enemyFireballList[i].Update(gameTime);

                    if (!playerShip.RecoveringActive) //Controlamos si la nave en ese momento acaba de ser destruida
                    {
                        if (playerShip.CollisionTest(enemyFireballList[i].Position, 20.0f))
                        {
                            enemyFireballList.RemoveAt(i); //eliminamos el disparo
                            playerShipExplotion.AddExplosion(playerShip.Posicion);

                            explosion.Play();
                        }
                        else if (enemyFireballList[i].Position.Y > 1000.0f) //eliminamos los disparos enemigos que salen por debajo sin colisionar
                        {
                            enemyFireballList.RemoveAt(i);
                        }
                    }
                }

                CreateEnemyTime();
                if (playerShip.Lives < 0)
                {
                    gameState           = GameState.EndScreen;
                    playerShip.Posicion = new Vector2(400.0f, 500.0f);
                    playerShip.Lives    = 5;
                    this.points         = 0;
                    enemyFireballList.Clear();
                    enemyShipList.Clear();
                    playerFireBallList.Clear();
                    UpdateSplashScreen();
                    MediaPlayer.Stop();
                    gameSongStartedPlaying = false;
                    timeIntructionText     = 5.0f;
                }
            }


            base.Update(gameTime);
        }