最初的想法是让球从墙体上反射回来,并在弹跳后保持相同的速度。提前谢谢。
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;
答案 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;
。
希望这有帮助!