andengine setPosition不起作用

时间:2014-03-10 13:00:06

标签: java android andengine

我尝试过以下代码,但是当我第二次点击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。 提前谢谢。

1 个答案:

答案 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如果您对该解决方案感到满意,请将我的帖子标记为答案并投票支持(勾选并向上箭头):)