JBox2d set body type dynamic 有时会失败

问题描述 投票:0回答:0

要实现的效果是让尸体一个一个落下来

之前的代码是所有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)
java android kotlin box2d jbox2d
© www.soinside.com 2019 - 2024. All rights reserved.