1

我有一个应用程序,我在屏幕上拖动一艘宇宙飞船避开小行星,并希望飞船在它们的矩形碰撞后返回到原来的位置,但它没有发生。

我不确定出了什么问题...

代码:

//Drag Ship


TouchCollection touchLocations = TouchPanel.GetState();

                foreach (TouchLocation touchLocation in touchLocations)
                {
                    Rectangle touchRect = new Rectangle
                    ((int)touchLocation.Position.X, (int)touchLocation.Position.Y, shipRect.Width, shipRect.Height);
                    if (touchLocation.State == TouchLocationState.Pressed
                    && shipRect.Intersects(touchRect))
                    {
                        shipPressed = true;

                    }
                    else if (touchLocation.State == TouchLocationState.Moved && shipPressed)
                    {
                        shipRect.X = touchRect.X - touchRect.Width / 2;
                        shipRect.Y = touchRect.Y - touchRect.Height / 2;
                    }
                    else if (touchLocation.State == TouchLocationState.Released)
                    {
                        shipPressed = false;
                    }
                    else if (lnBtnPlay.Tapped == true)
                    {

                    }


                }

代码 2:

      if (shipRect.Intersects(asteroid1Rect))
                {
                    shipPosition = new Vector2(10, 400);
                 }
4

1 回答 1

1

shipPressed除非您真正松开手指,否则永远不会设置为 false。因此,即使你可能与小行星相交,这艘船也会不断地回到你的身边。

一般来说,总是记得在“死亡”时重置一些东西。当你碰撞时清除shipPressed回来。false

如果即使您的手指没有触摸屏幕,船仍然没有返回,那么您shipPositionshipRect. 确保始终保持这两者同步。总是一起更新它们,或者更简洁地说,只保留位置,并存储宽度和高度;您可以使用属性/方法调用轻松地从中生成一个矩形。

于 2013-04-07T08:56:21.887 回答