我有一个应用程序,我在屏幕周围拖着一艘宇宙飞船避开小行星,并且希望船只在它们的矩形碰撞后返回到它的原始位置,但它不会发生。
我不确定出了什么问题......
代码:
//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);
}
答案 0 :(得分:1)
shipPressed
永远不会设置为false。因此,即使你可能与小行星相交,船也会不断回到你的手中。
一般情况下,请记住在“死亡”时重置一些东西。碰撞时将shipPressed
清除回false
。
如果即使您的手指没有触及屏幕,船仍然没有返回,那么您的shipPosition
不会与您的shipRect
同步。确保始终保持这两者同步。始终或更简洁地更新它们,保持正确的位置,并存储宽度和高度;你可以通过属性/方法调用轻松地从中轻松生成一个矩形。