我尝试过以下代码,但是当我第二次点击mMan1将其从520移动到422(在x中)时,它什么也没做(当我第一次点击时,setPosition工作正常)。
\\ in onCreateScene
mLine1 = new Sprite(422, 321, this.mLine,
getVertexBufferObjectManager());
mLine2 = new Sprite(274, 321, this.mLine,
getVertexBufferObjectManager());
scene.attachChild(mLine1);
Button bu1 = new Button(1, 139, 174, this.mButtonTextureRegion,
getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X,
float Y) {
if (pSceneTouchEvent.isActionUp()) {
scene.attachChild(mLine1);
scene.detachChild(mLine2);
mLine1.setVisible(true);
mLine2.setVisible(false);
setC(true);
if (b == false || mMan1.getX() == 277) {
mMan1.setPosition(422, 249);
setB(false);
}
}
return true;
};
};
Button bu2 = new Button(2, 500, 174, this.mButtonTextureRegion,
getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X,
float Y) {
if (pSceneTouchEvent.isActionUp()) {
scene.attachChild(mLine2);
scene.detachChild(mLine1);
mLine1.setVisible(false);
mLine2.setVisible(true);
setC(false);
if (b == false || mMan1.getX() == 422) {
mMan1.setPosition(277, 249);
setB(false);
}
}
return true;
};
};
mMan1 = new Man(3, 520, 249, this.mMan, getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X,
float Y) {
if (pSceneTouchEvent.isActionUp()) {
if (mMan1.getX() == 520 && c == true) {
mMan1.setPosition(422, 249);
setB(false);
} else if (mMan1.getX() == 238 && c == false) {
mMan1.setPosition(277, 249);
setB(false);
}
if (mMan1.getX() == 422 && mLine2.isVisible() == false
&& mLine1.isVisible() == true && b == false) {
mMan1.setPosition(520, 249);
setB(true);
}
if (mMan1.getX() == 277 && mLine1.isVisible() == false
&& mLine2.isVisible() == true && b == false) {
mMan1.setPosition(238, 249);
setB(true);
}
}
return true;
};
};
布尔值'b'和'c'默认为true。 提前谢谢。
答案 0 :(得分:1)
问题在于你的条件。
可能的情况:
第一次点击:mMan1>它在X
中从520移动到422第二次点击:mMan1>第1和第2'if'因位置而无法执行,因为line.isVisible()
而不会执行第3和第4.............
第一次点击:bu1>一行不可见,一行可见。玩家的位置没有改变
第二次点击:mMan1>第一个'if'将在X中将位置设置为422,然后(因为你写了'if'而不是'else if')接下来'if'将执行,因为X是422并且lines条件为真。该位置将被设置回522,因此您无法看到它。
.............
如果以bu2而不是bu1开头,则第二次不会发生任何事情,因为最后'if'的行条件为真,但位置不等于277。
PS如果使用的话会更清楚:
mLine2.isVisible()
而不是
mLine2.isVisible() == true
表示布尔值(! - 表示错误)。
你应该检查你的'如果'和'否则。我猜你的意思是'在这种情况下是否'。
PS2如果您对该解决方案感到满意,请将我的帖子标记为答案并投票支持(勾选并向上箭头):)