【问题标题】:Random number condition anomaly with AndEngine - AndroidAndEngine的随机数条件异常 - Android
【发布时间】:2014-01-25 02:21:23
【问题描述】:

我目前正在使用AndEngine,做一个带有面孔的小盒子游戏,这样玩家在触摸屏幕时就会产生面孔。所以在这里我已经将变量“onch”声明为双精度数,并将其设为 1 到 4 之间的随机数,这样每次调用 addFace 时,它​​都会生成一个新数字和一张新面孔。然而,我总是得到最后一张脸。我只得到这个:

face = new AnimatedSprite(pX, pY, this.mort, this.getVertexBufferObjectManager());
body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);

这里是完整的代码:

private void addFace(final float pX, final float pY) {
    onch = Math.floor((Math.random()*4)+1);

    final AnimatedSprite face;
    final Body body;

    if(onch == 4) {
        body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);
    } else if (onch == 3) {
        face = new AnimatedSprite(pX, pY, this.noel, this.getVertexBufferObjectManager());
        body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);
    } else if (onch == 2) {
        face = new AnimatedSprite(pX, pY, this.sournois, this.getVertexBufferObjectManager());
        body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);
    } else {
        face = new AnimatedSprite(pX, pY, this.mort, this.getVertexBufferObjectManager());
        body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);
    }

    face.animate(200);

    this.mScene.attachChild(face);
    this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(face, body, true, true));
}

为什么我只收到一个值?

【问题讨论】:

    标签: android random andengine conditional-statements physics


    【解决方案1】:

    我认为这是因为您使用

    设置变量
    final
    

    修饰符,一旦你设置了一个 final 变量的实例,它就不能被改变,所以你的随机代码可以正常工作,但是由于变量有 final 修饰符,一旦它们第一次被设置成这样,你就不能改变他们

    【讨论】:

    • 该方法只允许final修饰符,我试图改变它但它不会让我。
    【解决方案2】:

    代码有一些问题。

    • body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF); 这一行在代码中出现 四次 次。您可以将其从您的 if 语句中删除,因为它在所有四个语句中都是相同的。

    • 正如 JRowan 所说,final 不应在这种情况下使用。

    • 1234563 in, AnimatedSprite 类的animate() 方法改变了face 并使其最终看起来相同。

    【讨论】:

      【解决方案3】:

      这似乎不正确:

      onch = Math.floor((Math.random()*4)+1);
      

      试试:

      onch = Math.floor((Math.random()%4)+1);
      

      【讨论】:

      • 哦,确实。我不知道Math.Random 返回了一个双倍。我更惊讶他没有使用Random.nextInt()
      猜你喜欢
      • 2012-11-28
      • 2014-06-11
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多