示例#1
0
        public bool Handle(GameTime gameTime, Player player, int width, int height)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                return false;

            if (GamePad.GetCapabilities(PlayerIndex.One).IsConnected)
            {
                GamePadState padState = GamePad.GetState(PlayerIndex.One);

                if (padState.Buttons.Start == ButtonState.Pressed)
                    return false;

                double now = gameTime.TotalGameTime.TotalMilliseconds;
                if (now - lastBulletTime > Player.Bullet.bulletDelay)
                {
                    lastBulletTime = now;
                    if (padState.ThumbSticks.Right != Vector2.Zero)
                    {
                        player.AddBullet(new Vector2(player.Position.X + padState.ThumbSticks.Right.X, player.Position.Y - padState.ThumbSticks.Right.Y));
                    }
                }

                if (padState.ThumbSticks.Left != Vector2.Zero)
                {
                    player.direction.Y = -padState.ThumbSticks.Left.Y;
                    player.direction.X = padState.ThumbSticks.Left.X;
                    player.angle = (float)Math.Atan(player.direction.Y / player.direction.X);
                    player.angle -= player.direction.X < 0 ? (float)Math.PI : 0.0f;
                    player.Move();
                }
            }
            else
            {
                double now = gameTime.TotalGameTime.TotalMilliseconds;
                if (now - lastBulletTime > Player.Bullet.bulletDelay)
                {
                    lastBulletTime = now;
                    MouseState mouseState = Mouse.GetState();
                    if(mouseState.LeftButton.HasFlag(ButtonState.Pressed))
                        player.AddBullet(new Vector2(mouseState.X, mouseState.Y));
                }

                Keys[] keys = Keyboard.GetState().GetPressedKeys();

                foreach (Keys key in keys)
                {
                    switch (key)
                    {
                        case Keys.W:
                            player.Move();
                            break;
                        case Keys.A:
                            player.Rotate(false);
                            break;
                        case Keys.D:
                            player.Rotate(true);
                            break;
                        case Keys.Escape:
                            return false;
                    }
                }
            }
            return true;
        }