仅在用户触摸对象时应用手势效果

时间:2013-12-21 13:21:22

标签: c# windows-8 windows-store-apps xna-4.0 monogame

我是游戏开发的新手,我正在使用XNA的单一游戏实现为Windows商店开发一个概念,其中,我正在轻弹手势上移动球。但是,我的问题是球不仅在将手势应用于球时移动,而且在屏幕上的任何位置应用手势都会让我的球移动。我想要的是,当我对球本身进行轻弹而不是屏幕的其他区域时,我的球只会移动。我正在使用矩形边界框来查看用户是否触摸了球对象但是徒劳无功。

我正在与我的方法分享更新游戏时间

    //Global vars
    //cat is the ball object here
    GraphicsDeviceManager _graphics;
    SpriteBatch _spriteBatch;
    private Texture2D cat;
    private Vector2 _spritePosition;
    private SpriteFont _fontMiramonte;
    BounceableImage mBall;
    const float DECELERATION = 1000;
    Vector2 position = Vector2.Zero;
    Vector2 velocity;

  //Update method
 protected override void Update(GameTime gameTime)
        {
            // TODO: Add your update logic here
            while (TouchPanel.IsGestureAvailable)
            {
                GestureSample gesture = TouchPanel.ReadGesture();
                if (IsPointInObject(position))
                {
                    if (gesture.GestureType == GestureType.Flick)
                        velocity += gesture.Delta;
                    if (gesture.GestureType == GestureType.Hold)
                        position = gesture.Position;
                }
            }

            // Use velocity to adjust position and decelerate
            if (velocity != Vector2.Zero)
            {
                float elapsedSeconds = (float)gameTime.ElapsedGameTime.TotalSeconds;
                position += velocity * elapsedSeconds;
                float newMagnitude = velocity.Length() - DECELERATION * elapsedSeconds;
                velocity.Normalize();
                velocity *= Math.Max(0, newMagnitude);
            }
            UpdateSprite(gameTime, ref position, ref velocity);
            base.Update(gameTime);
        }



//method to detect whether the touched point lies inside the object ball
  public bool IsPointInObject(Vector2 positionVector)
        {
            Rectangle bbx = new Rectangle((int)position.X , (int)position.Y, (int)cat.Width, (int)cat.Height);
            return bbx.Contains((int)(positionVector.X), (int)(positionVector.Y));
        }

1 个答案:

答案 0 :(得分:0)

您必须在TouchPanel上设置画布并设置并锁定此画布,以便从播放器进行手势移动。您必须在Panel中设置较小的画布块,您希望在其中看到触摸效果。