Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 计算球的反弹_Math_Lua_Geometry_Bounce - Fatal编程技术网

Math 计算球的反弹

Math 计算球的反弹,math,lua,geometry,bounce,Math,Lua,Geometry,Bounce,我正在做一个突破游戏,我在计算球从球拍上的反弹时遇到了一些困难,根据球击中球拍的位置。我给出了以下ball.vx=(ball.x-paile.x)/10它反弹,但不是在桨的两侧都一样。例如,如果球击中了桨叶的最左侧,则ball.vx将为-3.2,如果最右侧为1.6 我所做的是: ball.vy=4 ball.vx=(ball.x-paile.x)/10 确保从每个对象上的同一参考执行计算,而不是从桨的中心和球的角进行计算 (也考虑使用保持速度相同或非常接近的方程式,即使角度发生变化)。 < P>

我正在做一个突破游戏,我在计算球从球拍上的反弹时遇到了一些困难,根据球击中球拍的位置。我给出了以下
ball.vx=(ball.x-paile.x)/10
它反弹,但不是在桨的两侧都一样。例如,如果球击中了桨叶的最左侧,则ball.vx将为-3.2,如果最右侧为1.6

我所做的是: ball.vy=4 ball.vx=(ball.x-paile.x)/10


确保从每个对象上的同一参考执行计算,而不是从桨的中心和球的角进行计算


(也考虑使用保持速度相同或非常接近的方程式,即使角度发生变化)。

< P>你应该记住:<代码>球> x<代码> >代码>桨。x < /代码>指<<强>球和<强>桨< <强> >

假设:

  • ball.r
    是球的半径
  • 桨。w
    是桨的宽度
你应该试试这样的方法:

ball.vx=(ball.x-ball.r/2-pable.x-padde.w/2)/10

更新:

ball.vx=((ball.x+ball.width/2)-(pable.x+padde.w/2))/10


ball.x-ball.r/2
ball.x-padde.w/2
代表球和桨的中间部分

请澄清你所说的“桨的两边不相等”是什么意思。我的意思是,例如,如果球击中了桨的最左侧,ball.vx应该是-3.2,如果最右边的1.6,我没有半径,因为球是一个图像,但我做了ball.width/2,不幸的是,它不起作用,球总是在右边。ball.vx=(ball.x-ball.width/2-pable.x-pable.width/2)/10我想我犯了一个错误,试试:
ball.vx=((ball.x+ball.width/2)-(ball.x+padde.w/2))/10
也不起作用。当球撞到桨的最左侧时,球会以锐角向左移动,而当球撞到桨的最右侧时,球会稍微向右移动。奇怪,你会在其他地方更改球的.vx值吗?
ball.x = ball.x + ball.vx
ball.y = ball.y + ball.vy