示例#1
0
 private void OnUpdate(object sender, GameTimerEventArgs e)
 {
     if (isActive)
     {
         particleSystem.Update(e.ElapsedTime.Milliseconds / 2000f);
     }
 }
示例#2
0
        /// <summary>
        /// Allows the page to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        private void OnUpdate(object sender, GameTimerEventArgs e)
        {
            // TODO: Add your update logic here
            refreshRate = (int)(1 / ((double)e.ElapsedTime.Milliseconds / 1000d));

            if (isGameOver == false)
            {
                #region key control
                var eq = enemies.Where(x => x.FirstCharacter.Equals(keysQueue.Text, StringComparison.OrdinalIgnoreCase) && !String.IsNullOrEmpty(x.FirstCharacter)).FirstOrDefault();
                if (eq != null)
                {
                    Debug.WriteLine(String.Format("  shoot {0}   keys {1}", eq.FirstCharacter, keysQueue.Count.ToString()));

                    Shoot(eq);
                    keysQueue.Clear();
                }
                else
                {
                    var eqp = enemies.Where(x => x.Text.StartsWith(keysQueue.Text, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

                    if (eqp != null)
                    {
                        ;
                    }
                    else
                    {
                        keysQueue.Clear();
                    }
                }
                #endregion

                CreateEnemy();

                LaserBullet tmpBullet = null;
                foreach (var laserBullet in bullets)
                {
                    if (laserBullet != null)
                    {
                        laserBullet.Update();

                        if (laserBullet.x < 0 || laserBullet.y < 0)
                        {
                            //laserBullet = null;
                            tmpBullet = laserBullet;
                        }
                    }
                }

                bullets.Remove(tmpBullet);

                #region collisions
                Enemy tmp = null;
                foreach (var item in enemies)
                {
                    item.Update();

                    if (item.position.Y > SharedGraphicsDeviceManager.Current.GraphicsDevice.Viewport.Height)
                    {
                        tmp = item;
                    }

                    if (item.ShouldBeRemoved)
                    {
                        tmp = item;
                    }

                    foreach (var laserBullet in bullets)
                    {
                        if (laserBullet != null && laserBullet.Bounds.Intersects(item.Bounds))
                        {
                            //remove letter form item
                            item.Hit();
                            tmpBullet = laserBullet;
                            score    += 20;
                        }
                    }
                    bullets.Remove(tmpBullet);

                    if (item.Bounds.Intersects(player.Bounds) && item.IsExploding == false)
                    {
                        player.Explode();
                        item.Explode();

                        playExplodeSound();
                    }
                }
                if (tmp != null)
                {
                    enemies.Remove(tmp);
                    tmp = null;
                }
                #endregion
                #region end game
                var enemyToExplode = enemies.Where(x => x.IsExploding == false && x.CenteryY > SharedGraphicsDeviceManager.Current.GraphicsDevice.Viewport.Height - 40).ToList();
                if (enemyToExplode.Count > 0)
                {
                    foreach (var item in enemyToExplode)
                    {
                        item.Explode();
                        playExplodeSound();
                    }
                }

                if (player.IsExploded || enemies.Any(x => x.IsExploded))
                {
                    //remove all game over
                    isGameOver = true;
                    enemies.Clear();
                }
                #endregion
            }
            else
            {
                endGameScore.Update();

                var touchCollection = TouchPanel.GetState();
                if (touchCollection.Count > 0)
                {
                    if (NavigationService.CanGoBack)
                    {
                        NavigationService.GoBack();
                    }
                    else
                    {
                        NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
                    }
                }
            }

            player.Update();
            particleSystem.Update(e.ElapsedTime.Milliseconds / 2000f);

            //background.Update(SharedGraphicsDeviceManager.Current.GraphicsDevice.Viewport.Bounds);
        }