使用函数physics.addForce();

时间:2014-03-02 10:22:57

标签: lua corona game-physics

我想根据用户的触摸位置为手榴弹增加力量。

--this is the code   
physics.addBody(grenade1,"dynamic",{density=1,friction=.9,bounce=0})
grenade1:applyForce(event.x,event.y,grenade1.x,grenade1.y)

这里x和y位置越多,力就越小。但是这里的力量太大了,以至于手榴弹在空中升起。

1 个答案:

答案 0 :(得分:0)

您必须校准施加的力。记住F = ma所以如果x = 250则F = 250,如果显示对象的质量(根据材料密度*对象区域在添加体时设置)为1,则加速度a = 250,这是非常大的。所以试试:

local coef = 0.001
grenade1:applyForce(coef*event.x, coef*event.y, grenade1.x, grenade1.y)

看看你得到了什么。如果太小,请增加coef,直到响应符合您的要求。您可能会发现线性(即常数系数)并不能提供您想要的效果,例如,对于小y,coef = 0.01可能没问题,但对于大y,您可能会发现coef = 0.001效果更好。在这种情况下,您必须使coef成为event.y的函数,例如

local coef = event.y < 100 and 0.001 or 0.01

您还可以增加显示对象的质量,而不是使用coeff。

回想一下,顶级角是0,0:顶级角的力是0,0。因此,如果您希望在屏幕上显示强制增加,则需要使用display.contentHeight - event.x