我对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。我已经尝试了我所知道的每一种方法,但却无法让它正常工作。伪作用的唯一时间是当我将精灵设置在完全相同的初始位置时,但除此之外它永远不会起作用。任何帮助将不胜感激!
答案 0 :(得分:0)
通过设置“sprite
和/或mX
成员来修改mY
的位置可能会导致您遇到的问题。为这个使用setter总是一个好主意。
更改jump
方法(以及任何其他位置),使其使用setX
和setY
方法,而不是mX
和mY
,它应该解决你的问题。