【问题标题】:Gamemaker: Ball won't bounce off wall on its own游戏制作人:球不会自己从墙上反弹
【发布时间】:2018-01-11 14:27:52
【问题描述】:

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

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; 

【问题讨论】:

  • 这段代码运行时球现在发生了什么?你试过调试它吗?无论如何,我注意到y-sign(vsp 有一个减号,x+sign(hsp) 有一个加号,因为所有其他正面和负面都匹配,我发现这个很奇怪。这可能不是问题的解决方案,但至少有一些帮助。

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


【解决方案1】:

有几点我让你失望了,我会在下面尝试全部介绍。

第一个是在你的第一个 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;

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2020-05-22
    • 2014-09-07
    相关资源
    最近更新 更多