要实现的效果是让尸体一个一个落下来
之前的代码是所有body在创建的时候都设置为DYNAMIC,当index增加position.y增加,这使得它们排在高列,一些body下降后穿过另一个,所以我选择了计划如下。
刚创建的时候把body的类型设置为STATIC,然后animationTimer把body一个个设置为DYNAMIC,让它们在下落的时候保持一定的距离
问题是身体有时固定在顶部(选中,仍然是静态类型),在我的测试中,15-20 有 1 个。我不明白为什么会这样,是时间步长问题还是其他问题?
for (i in 0..20) {
val bodyDef = BodyDef()
bodyDef.type = BodyType.STATIC
bodyDef.position = Vec2(3.6f, 0f)
val shape = PolygonShape()
shape.setAsBox(2.0f, 1.0f)
val fixture = FixtureDef()
fixture.shape = shape
fixture.friction = 0.2f
fixture.restitution = 0.1f
fixture.density = 0.6f
val body = mWorld!!.createBody(bodyDef)
body.isFixedRotation = true
body.createFixture(fixture)
discBodies.add(body)
}
var i = 0
val animationTimer = Timer()
animationTimer.schedule(object: TimerTask() {
override fun run() {
val body = discBodies[i]
body.type = BodyType.DYNAMIC
body.isAwake = true
body.applyForceToCenter(Vec2(0.0f, 3f))
if (i == discBodies.size - 1) {
animationTimer.cancel()
}
i += 1
}
}, 0, 80)