我目前正在使用AndEngine来做一个带有面孔的小盒子游戏,这样玩家在触摸屏幕时会产生脸部。所以在这里我已经将变量“onch”声明为double,并且我将它设置为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));
}
为什么我只收到一个值?
答案 0 :(得分:1)
我认为这是因为您使用
设置变量final
修饰符,一旦你设置了一个最终变量的实例,它就无法改变,所以你的随机代码工作正常,但由于变量有最终修饰符,一旦它们被设置为第一次它们被卡住,你就无法改变它们
答案 1 :(得分:0)
代码存在一些问题。
此行body = PhysicsFactory.createCircleBody(this.mPhysicsWorld, face, BodyType.DynamicBody, FIXTURE_DEF);
出现在代码四次中。您可以从if
语句中删除它,因为它在所有四个语句中都是相同的。
正如JRowan所说,在这种情况下不应该使用final
。
现在,如果您确定在此方法结束时面部完全相同,则问题出在以下调用之一:AnimatedSprite()
构造函数可能会为您提供相同的面,无论参数是什么您输入animate()
类的{strong>或 AnimatedSprite
方法会更改face
并使其最终看起来相同。
答案 2 :(得分:-1)
这似乎不正确:
onch = Math.floor((Math.random()*4)+1);
尝试:
onch = Math.floor((Math.random()%4)+1);