0

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

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; 
4

1 回答 1

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 的值。将您的代码换成上面的代码将导致球更靠近它要碰撞的表面,直到它不再靠近,我假设这是预期的行为。

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

不过需要注意的是,您可以用他们的速记版本替换y = y + vsp;and和.x = x + hsp;y += vsp;x += hsp;

希望这可以帮助!

于 2018-01-22T17:18:19.967 回答