游戏制造者:Ball不会自己从墙上弹跳

时间:2018-01-11 14:27:53

标签: collision game-maker game-maker-language game-maker-studio-2

最初的想法是让球从墙体上反射回来,并在弹跳后保持相同的速度。提前谢谢。

if (place_meeting(x,y + vsp,o_wall))
{
    while (!place_meeting(x,y-sign(vsp),o_wall))
    {
        y = y * sign(vsp);
    }
    vsp = -vsp;
}
y = y + vsp; 
if (place_meeting(x + hsp,y,o_wall))
{
    while (!place_meeting(x+sign(hsp),y,o_wall))
    {   
        x = x * sign(hsp);
    }
    hsp = -hsp;
}
x = x + hsp; 

1 个答案:

答案 0 :(得分:0)

有几点让我失望,我会尝试在下面覆盖它们。

首先,在检查垂直位置时,在第一个while循环中,您需要更改:

while(place_meeting(x, y-sign(vsp), o_wall))

while(place_meeting(x, y+sign(vsp), o_wall))

再见检查y-sign(vsp)你实际上是在y轴上检查球后面的位置。

第二件事肯定会导致一些奇怪的行为是你的while循环内部的两行代码,包括X轴和Y轴。您需要将它们更改为:

y += sign(vsp);x += sign(hsp);

您此刻编写的代码将在实际值和相同值之间翻转球位置但是负值 - 取决于vsp和hsp的值。将代码换成上面的代码将导致球移动到它将要碰撞的表面附近,直到它不能更接近,我认为这是预期的行为。

这些是我能看到的唯一可能妨碍Ball行为的事情。

但请注意,您可以使用速记版本y = y + vsp;x = x + hsp;替换y += vsp;x += hsp;

希望这有帮助!