游戏制作人:球不会自己从墙上反弹

Posted

技术标签:

【中文标题】游戏制作人:球不会自己从墙上反弹【英文标题】: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) 有一个加号,因为所有其他正面和负面都匹配,我发现这个很奇怪。这可能不是问题的解决方案,但至少有一些帮助。 【参考方案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;

希望这会有所帮助!

【讨论】:

以上是关于游戏制作人:球不会自己从墙上反弹的主要内容,如果未能解决你的问题,请参考以下文章

python简单游戏-反弹球

如何制作一个反弹球

游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)

游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)

游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)

游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)