Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libgdx重叠停止绘制_Java_Android_Libgdx - Fatal编程技术网

Java libgdx重叠停止绘制

Java libgdx重叠停止绘制,java,android,libgdx,Java,Android,Libgdx,我已经编写了以下代码。一旦发生碰撞,我将停止绘制对象1。不幸的是,它仅在发生碰撞时停止绘制对象,然后再次开始绘制对象 举一个我想学习的例子:玩家收集硬币,硬币消失。如果玩家未命中硬币,硬币仍会出现在屏幕上 这个想法是在我开始组装东西之前先学习基本概念。没有理解就复制代码是没有乐趣的。提前谢谢 batcher.begin(); if (egg.collected) { batcher.draw(AssetLoader.textureEgg, eggRect.x, e

我已经编写了以下代码。一旦发生碰撞,我将停止绘制对象1。不幸的是,它仅在发生碰撞时停止绘制对象,然后再次开始绘制对象

举一个我想学习的例子:玩家收集硬币,硬币消失。如果玩家未命中硬币,硬币仍会出现在屏幕上

这个想法是在我开始组装东西之前先学习基本概念。没有理解就复制代码是没有乐趣的。提前谢谢

    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;
}

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

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

public boolean collected = false;
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();
如果您想实践良好的封装,可以将此变量设为私有变量,并为其提供getter和setter,但我将保持这样的简单性

然后,在游戏或屏幕类中,您需要告知收集鸡蛋的时间:

public boolean collected = false;
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();
现在,您应该仅在未收集鸡蛋的情况下绘制鸡蛋:

public boolean collected = false;
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,这有点奇怪,但您并没有将其用作矩形,而是将其用作其他矩形的容器。您还可以删除extends Rectangle。

向coin类添加一个成员变量boolean,用于跟踪是否已收集。i、 e.如果eggRect.overlapsboundingRect mCollected=true;如果收到退货//不用画画,谢谢。我刚刚在我的问题中添加了我的egg类代码。请你详细说明一下你的上述评论好吗。我不太确定如何按照你的建议去做。那么会发生什么呢?请注意,如果未收集,则要绘制它。你倒过来了,我把真的改成假,游戏仍然会因为以下错误而崩溃。线程LWJGL应用程序java.lang.NullPointerException中的异常位于com.mygdx.gameworld.GameRenderer.rendergamerender.java:60位于com.mygdx.screens.GameScreen.rendergamesscreen.java:32位于com.badlogic.gdx.Game.renderGame.java:46位于com.badlogic.gdx.backends.LWJGL.lwjglaplication.mainloopjglaplication.java:214位于com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.runLwjglApplication.java:120用最新的修改更新了代码。游戏刚刚崩溃。NullPointerException通常很容易调试。在您的情况下,您当前的代码从未实例化鸡蛋。谢谢您的帮助。我将在谷歌上搜索,看看如何解决NulPointerExceptions问题。这个问题占用了我太多的时间,我开始觉得我需要回到基本的问题上来。再次感谢你抽出时间让我走上正确的方向。