我正在使用XNA的Monogame实现开发一个Windows商店游戏,其中应用了轻扫手势来移动屏幕上的对象。
以下是我在Update方法中编写的代码,用于实现轻扫并更新对象位置和速度:
while (TouchPanel.IsGestureAvailable)
{
GestureSample gesture = TouchPanel.ReadGesture();
if (gesture.GestureType == GestureType.Flick)
velocity += gesture.Delta;
if (gesture.GestureType == GestureType.Hold)
position = gesture.Position;
}
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);
void UpdateSprite(GameTime gameTime, ref Vector2 spritePosition, ref Vector2 spriteSpeed)
{
// Move the sprite by speed, scaled by elapsed time.
spritePosition += spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
int MaxX = GraphicsDevice.Viewport.Width - cat.Width;
int MinX = 0;
int MaxY = 500 - cat.Height;
int MinY = 0;
// Check for bounce.
if (spritePosition.X > MaxX - 10)
{
if (spritePosition.Y <= 200 || spritePosition.Y >= 300)
{
spriteSpeed.X *= -1;
spritePosition.X = MaxX;
}
else
{
PositionCount = 0;
}
}
else if (spritePosition.X < MinX + 10)
{
if (spritePosition.Y <= 200 || spritePosition.Y >= 300)
{
spriteSpeed.X *= -1;
spritePosition.X = MinX;
}
else
{
PositionCount = 0;
}
}
if (spritePosition.Y > MaxY)
{
spriteSpeed.Y *= -1;
spritePosition.Y = MaxY;
}
else if (spritePosition.Y < MinY)
{
spriteSpeed.Y *= -1;
spritePosition.Y = MinY;
}
}
这段代码已经可以完美实现物体的轻弹效果。但我希望在用户轻弹物体后,如果该物体与其他物体发生碰撞,则第二个物体也应该移动,就像桌球中的硬币一样,当击球手碰到它们时它们会移动。
我已经尝试过碰撞和移动的逻辑,但都没有成功。
非常感谢任何形式的帮助。
非常感谢。