-1

在我的小游戏中,我试图通过碰撞来识别和删除一个实体,然后生成一个新实体。我无法更改两个数组列表“removeList”和“entities”,因为冲突代码看起来像是两个单独的列表。我已经对其进行了错误测试,以查看实体是否确实发生碰撞并通知计算机并且工作正常。

这是我的目标碰撞代码:

public void collidedWith(Entity other) {
    game = new Game();
    if (used) {
    return;
    }
    if (other instanceof PlayerEntity) {
    game.removeEntity(this);
    game.spawnTarget();//This does work as I call it earlier in the code

    used = true;
    }
}

这是游戏循环碰撞代码,它会带来目标碰撞代码:

for (int p = 0; p < entities.size(); p++) {
        for (int s = p + 1; s < entities.size(); s++) {
        Entity me = entities.get(p);
        Entity him = entities.get(s);

        if (me.collidesWith(him)) {
        me.collidedWith(him);
        him.collidedWith(me);
        }
        }
    }

这是删除实体代码:

public void removeEntity(Entity entity) {
    removeList.add(entity);
    entities.removeAll(removeList);
    removeList.clear();
    }

请注意:我知道我可以在不需要 removeList 的情况下删除实体,但我想将主要代码实现到最初开始的 gameLoop 中。我将其移至 removeEntity 方法进行错误测试。

我刚开始使用实体和 LWJGL,所以任何提示都会很棒。

4

1 回答 1

0

这已解决,因为我需要使类构造函数链接回游戏类。

protected TargetEntity(Game game, int x, int y) {
        super(x, y, 10, 10);
        this.game = game;
    }

这是而不是...

game = new Game();
于 2013-06-21T12:59:16.900 回答