2014-01-25 30 views
0

我目前使用AndEngine,做一個有面孔的小盒子游戲,以便玩家在觸摸屏幕時產生臉部。所以在這裏我已經將變量「onch」聲明爲double,並且我將它設置爲1到4之間的隨機數,這樣每次調用addFace時,它都會生成一個新數字,並生成一個新面。不過,我總是得到最後一張臉。我得到僅此:AndEngine隨機數條件異常 - Android

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)); 
} 

爲什麼我只收到了一個價值?

回答

1

我想那是因爲你與

final 

修改設置的變量,一旦你設定一個最後的變量不能改變的情況下,讓您的隨機代碼工作正常,但自變量具有final修飾符,一旦被設定他們第一次被卡住一樣,你不能改變他們

+0

該方法只允許'final'修飾符,我試圖改變它,但它不會讓我。 – SilenT612

-1

這似乎是不正確的:

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

嘗試:

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

我查過了,它的權利 – JRowan

+0

哦,的確如此。我不知道'Math.Random'返回了一倍。我更驚訝他沒有使用Random.nextInt()。 – jww

0

代碼存在一些問題。

  • 該行body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);出現在代碼次。你可以把它從你的if陳述中拿出來,因爲它們在所有四個中都是一樣的。

  • 正如JRowan所說,final不應該在這種情況下使用。現在

  • ,如果你確信面孔在這個方法結束完全相同,問題是這些調用之一:AnimatedSprite()構造可能給你相同的臉,不管你放什麼論據,animate()方法AnimatedSprite類改變了face,並使它看起來一樣到底。