c# – XNA中两个纹理之间的碰撞检测

我正在使用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;
        }
    }

使用此代码轻弹对象.但我正在寻找的是,当用户轻弹对象并且如果被轻弹的物体与任何其他物体碰撞时,则第二个物体也应该移动,就像当轻弹的撞击者与它们碰撞时,移动物币的移动方式.

我试过把碰撞和运动的逻辑放在一边,但是徒劳无功.

任何形式的帮助将受到高度赞赏.

非常感谢.

最佳答案 使用
Farseer Physics Engine.它是一款基于Box2D的流行C#物理引擎,与MonoGame兼容.它有很多代码示例和正确的文档.

点赞