AndEngine-Android随机数条件异常
我目前正在使用,做一个有脸的小盒子游戏,这样玩家在触摸屏幕时会产生脸。在这里,我已经将变量“onch”声明为double,并将其设置为1到4之间的随机数,这样每次调用addFace时,它都会生成一个新的数字,从而生成一个新的面。然而,我总是得到最后一张脸。我只得到这个:AndEngine-Android随机数条件异常,android,random,andengine,conditional-statements,physics,Android,Random,Andengine,Conditional Statements,Physics,我目前正在使用,做一个有脸的小盒子游戏,这样玩家在触摸屏幕时会产生脸。在这里,我已经将变量“onch”声明为double,并将其设置为1到4之间的随机数,这样每次调用addFace时,它都会生成一个新的数字,从而生成一个新的面。然而,我总是得到最后一张脸。我只得到这个: face = new AnimatedSprite(pX, pY, this.mort, this.getVertexBufferObjectManager()); body = PhysicsFactory.createCir
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));
}
为什么我只收到一个值?我认为这是因为您使用
final
修饰符,一旦您设置了最终变量的实例,它就无法更改,因此您的随机代码可以正常工作,但由于变量具有最终修饰符,一旦在第一次设置它们时就被卡住,您就无法更改它们。这似乎不正确:
onch = Math.floor((Math.random()*4)+1);
尝试:
代码有一些问题
- 此行
body=physicFactory.createCircleBody(This.mpphysisWorld,face,BodyType.DynamicBody,FIXTURE_DEF)代码>在代码中出现四次。你可以把它从你的
语句中去掉,因为这四个语句都是一样的if
- 正如JRowan所说,
不应该在这种情况下使用final
- 现在,如果您确定此方法末尾的面完全相同,那么问题在于其中一个调用:
constructor可能会为您提供相同的面,无论您输入了什么参数,或AnimatedSprite()
animate()
类的方法更改AnimatedSprite
,使其最终看起来相同面
数学。Random
返回了一个双精度。我更惊讶的是他没有使用Random.nextInt()
。该方法只允许final
修饰符,我试图更改它,但它不允许我使用。
onch = Math.floor((Math.random()%4)+1);