使用函数 physics.addForce() 时施加的力过大。

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

--这是代码
physics.addBody(grenade1,"dynamic",{density=1,friction=.9,bounce=0})
grenade1:applyForce(event.x,event.y,grenade1.x,grenade1.y)

在这里,x和y位置越低,力量越小。但是,这里的力量太大了,手榴弹在天空中。

点赞
用户869951
用户869951

你必须校准施加的力。记得 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 直到响应是你想要的。你可能会发现,线性的(即常数 coef)不会给你想要的效果,例如 coef = 0.01 可能对于小的 y 来说很好,但是对于大的 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

2014-03-04 15:53:59