collidesWith方法AndEngine无法正常工作

时间:2014-12-30 05:03:22

标签: java android andengine

我对AndEngine上的collidesWith()方法有很多问题。我可以在屏幕上看到,我创建的玩家和硬币精灵显然是在碰撞,但下面的代码没有执行。

scene.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onUpdate(float pSecondsElapsed) {
            // TODO Auto-generated method stub
            checkCollision();
            scoreText.setText(String.valueOf(score));
        }
    });
    return scene;
}


public void checkCollision() {   
    if(player1.collidesWith(coin)) {
        player1.setColor(Color.RED);
        coin.detachSelf();
        score+=200;
    }
}

public void loadSprites() {   //This loads the sprites
    coin = new Coin(210, 220, this.coinTR,
            this.getVertexBufferObjectManager());
    player1 = new Player(INITX, INITY, this.player,
            this.getVertexBufferObjectManager()) {
        @Override
        protected void onManagedUpdate(float pSecondsElapsed) {
            // TODO Auto-generated method stub
            super.onManagedUpdate(pSecondsElapsed);
            // this.runRight();
            if (this.jump) {
                this.jump();
                this.checkPositionForJump();
            }
        }

    };

}

public void jump() {   //This jump method is part of the player class, it just follows a parabolic path to jump
    this.mX+=SPEED;
    this.mY = (float) (((this.mX - (this.startX + this.VERTX)) * (this.mX - (this.startX + this.VERTX)))
            / (this.STRETCH) + this.startY + this.VERTY);
}

正如您所看到的那样,它只是沿着一条抛物线路径,从它当前所处的位置开始。

在checkCollision()方法中,if语句永远不会计算为true。我已经尝试了我所知道的每一种方法,但却无法让它正常工作。伪作用的唯一时间是当我将精灵设置在完全相同的初始位置时,但除此之外它永远不会起作用。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

通过设置“sprite和/或mX成员来修改mY的位置可能会导致您遇到的问题。为这个使用setter总是一个好主意。

更改jump方法(以及任何其他位置),使其使用setXsetY方法,而不是mXmY,它应该解决你的问题。