我正在创建一个小平台游戏,我被困在TOP和BOTTOM对象的碰撞中。
出于某种原因,td
在与块重叠时不会停止下降。它只会将player
重置为false并将jump
置为0,但不会将force
置于块的顶部。
这是我到目前为止所做的代码......
player
我试图弄清楚为什么玩家在撞到街区顶部大约一个小时(尝试不同的代码)并且没有尝试过任何工作时都不会让玩家停下来。
答案 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;
}