对象碰撞在c#中无法正常工作

时间:2015-05-09 21:01:04

标签: c# visual-studio-2013

我正在创建一个小平台游戏,我被困在TOP和BOTTOM对象的碰撞中。

出于某种原因,td在与块重叠时不会停止下降。它只会将player重置为false并将jump置为0,但不会将force置于块的顶部。

这是我到目前为止所做的代码......

player

我试图弄清楚为什么玩家在撞到街区顶部大约一个小时(尝试不同的代码)并且没有尝试过任何工作时都不会让玩家停下来。

1 个答案:

答案 0 :(得分:1)

首先,我想提供一些提示。

我建议更多地关注你的逻辑,改进评论或将某些条件分解为辅助方法。

如果2个控件发生碰撞,辅助方法可能会有所帮助。

使用Right,Left,Bottom,Top属性而不是自己计算:

player.Left + player.Width == player.Right

还要考虑在所有条件语句周围使用花括号。

我看到的问题是:

if (jump == true)
    player.Top -= force; force -= 1;

在这种情况下,force -= 1;将始终执行,if语句仅适用于下一个语句(直到下一个分号,而不是行)。

使用调试器 - 如果您还没有搜索过如何使用调试器。它将帮助您找出(调试)您的问题:)

鉴于这些提示,这是我对您的问题的理解。你让玩家向下移动,无论他们是否与一个街区发生碰撞。您需要将块冲突条件添加到先前的if / else语句中。

// if the player is at the bottom of the screen
if (player.Bottom >= screen.Bottom) 
{
    jump = false;
}
// if the player is hitting a block
else if (player.Right >= block.Left &&
    player.Left <= block.Right &&
    player.Bottom >= block.Top &&
    player.Top <= block.Bottom)
{
    force = 0;
    jump = false;
}
else
{
    player.Top += 5;
    jumped = false;
    nothing = false;
}