我正在尝试使用eclipse将java游戏移植到Android,但是,我一直试图调试碰撞检测系统。我使用“java.awt.Rectangle”作为游戏的碰撞检测系统,它在Applet上运行良好,但当我将其转换为“android.graphics.Rect”时,应用程序在logcat中返回:
09-24 16:23:07.047:E / AndroidRuntime(15845):java.lang.NullPointerException:尝试从空对象引用上的字段'int android.graphics.Rect.left'读取
有人可以告诉我这意味着什么,如何调试,以及我的代码有什么问题? (如下所示)
编辑:在进行更改后,我发现“Rect.intersects”由于某种原因无法正常工作。两个矩形没有识别出碰撞。如果有帮助,我正在遵循“http://www.kilobolt.com/day-7-creating-an-android-game-from-start-to-finish.html”
中的教程private int x;
private int y;
private int speedY;
protected boolean visible;
protected Rect r;
public Shoot(int startX, int startY) {
// TODO Auto-generated constructor stub
x = startX;
y = startY;
speedY=-14;
visible= true;
r = new Rect(0, 0, 0, 0);
}
public void update() {
y += speedY;
r.set(x, y, 15, 15);
if (y < 0) {
visible = false;
r = null;
}
else if (y < 750) {
checkCollision();
}
}
private void checkCollision() {
//detects collision
if (Rect.intersects(r, GameScreen.basket.getBounds())) {
visible = false;
GameScreen.score += 1;
}
}
(以下代码来自篮子类)
public Rect getBounds() {
//Creates Rectangle boundaries for collisions
return new Rect(240, 73, 15, 15);
}
答案 0 :(得分:0)
你可能想写:
if (y< 0){
visible = false;
r = null;
} else if (y < 750){
checkCollision();
}
而不是
因此,添加其他,您不会检查 null 对象。
if (y< 0){
visible = false;
r = null;
}
if (y < 750){
checkCollision();
}
或者,您可以通过添加非空检查来更改 checkCollision()。
private void checkCollision(){
//detects collision
if (r!=null && Rect.intersects(r, GameScreen.basket.getBounds())){
visible = false;
GameScreen.score +=1;
}
}
答案 1 :(得分:0)
也许你想这样做,看看else
:
if (y< 0){
visible = false;
r = null;
}
else if (y < 750){
checkCollision();
}