游戏制作人:球不会自己从墙上反弹
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;
。
希望这会有所帮助!
【讨论】:
以上是关于游戏制作人:球不会自己从墙上反弹的主要内容,如果未能解决你的问题,请参考以下文章
游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)
游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)
游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)
游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)