碰撞精灵不会移动到新的位置

时间:2013-04-06 23:56:02

标签: c# windows-phone-7 xna

我有一个应用程序,我在屏幕周围拖着一艘宇宙飞船避开小行星,并且希望船只在它们的矩形碰撞后返回到它的原始位置,但它不会发生。

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

代码:

//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);
                 }

1 个答案:

答案 0 :(得分:1)

除非您实际释放手指,否则

shipPressed永远不会设置为false。因此,即使你可能与小行星相交,船也会不断回到你的手中。

一般情况下,请记住在“死亡”时重置一些东西。碰撞时将shipPressed清除回false

如果即使您的手指没有触及屏幕,船仍然没有返回,那么您的shipPosition不会与您的shipRect同步。确保始终保持这两者同步。始终或更简洁地更新它们,保持正确的位置,并存储宽度和高度;你可以通过属性/方法调用轻松地从中轻松生成一个矩形。