我正在尝试开发我的第一个Android游戏,它的游戏名为" brick breaker"。 我相信大家都知道。
一切都很好,直到我来到球弹跳部分。
为了处理冲突,我使用了这个找到的代码:
scene.registerUpdateHandler(new IUpdateHandler() {
public void reset() { }
public void onUpdate(final float pSecondsElapsed) {
if(ball.collidesWith(paddle)) {
ball.bounceWithRectangle(paddle);
}
else if (ball.getY() >= Game.getCAMERA_HEIGHT() - 30) {
scene.setBackground(new ColorBackground(255f, 0f, 0f));
}
else {
for (int i = 0; i < bricks.length; i++) {
for (int j = 0; j < bricks[0].length; j++) {
scene.setBackground(new ColorBackground(0f, 0f, 0f));
if(ball.collidesWith(bricks[i][j])) {
bricks[i][j].setPosition(CAMERA_HEIGHT+20, CAMERA_WIDTH+20);
scene.getTopLayer().removeEntity(bricks[i][j]);
ball.bounceWithRectangle(bricks[i][j]);
}
}
}
}
}
});
这就是Ball.java类的样子:
package com.example.zaidimas;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.entity.primitive.Rectangle;
import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;
import java.lang.Math;
public class Ball extends AnimatedSprite {
float velocity = 100;
int i =0;
private Engine mEngine;
public Ball(float positionX, float positionY, TiledTextureRegion positionTextureRegion, Engine mEngine) {
super(positionX, positionY, positionTextureRegion);
this.mEngine = mEngine;
}
protected void onManagedUpdate(final float pSecondsElapsed) {
if(this.mX < 0) {
this.setVelocityX(velocity);
} else if(this.mX + this.getWidth() > Game.getCAMERA_WIDTH()) {
this.setVelocityX(-velocity);
}
if(this.mY < 0) {
this.setVelocityY(velocity);
} else if(this.mY + this.getHeight() > Game.getCAMERA_HEIGHT()) {
this.setVelocityY(-velocity);
}
super.onManagedUpdate(pSecondsElapsed);
}
public void bounceWithRectangle(Rectangle rectangle){
this.setVelocityY(-this.getVelocityY());
}
}
它很有效,而且非常清楚。
但问题是球总是从所有表面以相同的角度反弹。 我认为这个角度是90度。
我已经找到了一些信息,但我无法对此项目进行调整。
我希望我的问题很明确。
P.S。游戏基于AndEngine aaand 最重要的是 - 抱歉我的英语不好:D
有一个美好的一天/晚上!
答案 0 :(得分:2)
这更像是一个物理问题,而不是编程问题,但无论如何我们都去了。
您当前的规则
以下是您在程序中描述的当前规则。
目前,你的速度总是(100,100),(100,-100),( - 100,100)或(-100,-100)。所有这些矢量彼此成90度角,这解释了您所描述的现象。
改进规则
假设你想要一些速度变化。尝试这样的事情:
你可以进一步打破这种局面。球越靠近块的左侧,X速度的变化应该越大。对于我们都记得的游戏,这应该更为真实。
最重要的变化是知道何时击中一个街区的左侧,中间或右侧。将砖块存放在“碎片”中是明智的,这样每块砖都可以由三块或更多块组成。这样,当你碰到一块时,你就会确切知道你击中了哪一块。