我正在开发一款使用AndEngine的游戏,该游戏基于特定组合中的怪物攻击。我从1到4生成随机数,然后我将它们保存到堆栈。然后我为每个精灵使用onAreaTouched方法,我也有一些if-else语句,但这似乎不起作用。我可以按照我想要的时间点击怪物,即使它不在堆叠中,我仍然可以获得分数。请帮忙。
以下是精灵反应的代码:
Monster monsterTopLeft = new Monster(1, 100, 225, this.mMonsterTopLeft, getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
switch (pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
break;
case TouchEvent.ACTION_UP:
if (mStack.isEmpty() || (mStack.peek().toString() != "1")){
break;
}
if (!mStack.isEmpty()&&mStack.peek().toString().equals("1")){
mReverseStack.push(mStack.pop());
score = score + 1;
mText.setText(String.valueOf(score));
if(mStack.isEmpty()){
cislo = generateNumber();
reverseNumbersInStack1();
mReverseStack.push(new Integer(cislo));
reverseNumbersInStack2();
}
}
break;
}
return true;
}
这是我用来在OnCreateScene中生成数字的代码:
scene.attachChild(monsterTopLeft);
scene.attachChild(monsterTopRight);
scene.attachChild(monsterBottomLeft);
scene.attachChild(monsterBottomRight);
scene.registerTouchArea(monsterTopLeft);
scene.registerTouchArea(monsterTopRight);
scene.registerTouchArea(monsterBottomLeft);
scene.registerTouchArea(monsterBottomRight);
scene.setTouchAreaBindingOnActionDownEnabled(true);
scene.registerUpdateHandler(new IUpdateHandler() {
@Override
public void onUpdate(float pSecondsElapsed) {
cislo=generateNumber();
mStack.push(new Integer(cislo));
scene.unregisterUpdateHandler(scene);
}
@Override
public void reset() {
}
});
return scene;
}
public int generateNumber() {
Random r = new Random();
return r.nextInt(4 - 1) + 1;
}
public void reverseNumbersInStack1() {
int i;
for (i = mStack.size(); mStack.isEmpty(); ) {
mReverseStack.push(mStack.pop());
}
}
public void reverseNumbersInStack2() {
int i;
for (i = mReverseStack.size(); mReverseStack.isEmpty(); ) {
mStack.push(mReverseStack.pop());
}
}
}