我是游戏开发的新手,我正在使用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));
}
答案 0 :(得分:0)
您必须在TouchPanel上设置画布并设置并锁定此画布,以便从播放器进行手势移动。您必须在Panel中设置较小的画布块,您希望在其中看到触摸效果。