libgdx重叠停止绘制

时间:2015-03-25 19:47:42

标签: java android libgdx

我写了以下代码。一旦发生碰撞,我想停止绘图。不幸的是,它只在发生碰撞时才停止绘制对象,然后再次开始绘制对象。

举一个我要学习的例子:玩家收集硬币,硬币消失。如果玩家错过了硬币,硬币仍会出现在屏幕上。

我的想法是在开始整理之前学习基本概念。在不理解的情况下复制代码并不好玩。提前谢谢。

    batcher.begin();
    if (egg.collected) {
        batcher.draw(AssetLoader.textureEgg, eggRect.x, eggRect.y, eggRect.width, eggRect.height);
    }
    batcher.end();

我的蛋类:

public class Egg {
private Rectangle egg;
private Vector2 location;

public Egg(float x, float y){

    location = new Vector2(x, y);
    egg = new Rectangle(location.x, location.y, 10, 15);
}

public void update(float delta) {
    egg.x--;
    if (egg.x < -20) {
        egg.x = 137;
    };
}

public boolean collected = false;


public Rectangle getEgg() {
    return egg;
}

public boolean isCollected() {
    return collected;
}

}

上述代码的结果是:游戏崩溃并出现以下错误。

Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.mygdx.gameworld.GameRenderer.render(GameRenderer.java:60)
at com.mygdx.screens.GameScreen.render(GameScreen.java:32)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:214)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)

2 个答案:

答案 0 :(得分:0)

Tenfour04是对的。由于当两个对象重叠时碰撞为真,它将在重叠时停止绘制并再次开始绘制。将返回值保存到成员变量。

答案 1 :(得分:0)

在Egg类中创建一个成员变量,以跟踪鸡蛋是否已被收集:

public boolean collected = false;

如果你想练习良好的封装,你可以将这个变量设为私有并给它一个getter和setter,但我会保持这样简单。

然后在你的游戏或屏幕课程中,你需要告诉鸡蛋收集时间:

if (eggRect.overlaps(boundingRect))
    egg.collected = true;

现在,如果没有收集鸡蛋,你应该只画鸡蛋:

batcher.begin();
if (!egg.collected){
    batcher.draw(AssetLoader.textureEgg, eggRect.x, eggRect.y, eggRect.width, eggRect.height);
}
batcher.end();

顺便说一句,你的Egg类扩展Rectangle有点奇怪,但是你并没有将它用作Rectangle而是用作其他Rectangle的容器。您也可以删除“extends Rectangle”。