从舞台上移除演员?

我使用LibGDX,在游戏中只移动相机。昨天,我建立了一种在游戏中绘制地面的方法。我正在尝试制作Flappy Bird的克隆,但我在绘制在屏幕上移动的地面时遇到问题。在每次渲染调用中,我都会向 添加一个新的渲染,但几次后,绘图不再流动。每秒帧数下沉非常快。有没有另一种方法可以在游戏中平局?ActorStage


答案 1

如果我没看错的话,你的问题是,一旦演员离开屏幕,他们仍然在被处理并导致滞后,你希望他们被删除。如果是这种情况,您只需循环遍历舞台中的所有角色,将其坐标投影到窗口坐标,然后使用这些坐标来确定演员是否不在屏幕外。

for(Actor actor : stage.getActors())
{
    Vector3 windowCoordinates = new Vector3(actor.getX(), actor.getY(), 0);
    camera.project(windowCoordinates);
    if(windowCoordinates.x + actor.getWidth() < 0)
        actor.remove();
}

如果窗口中的 actor x 坐标加上它的宽度小于 0,则 actor 已完全从屏幕上滚动,可以将其删除。


答案 2

对@kabb的解决方案稍调整:

    for(Actor actor : stage.getActors()) {
        //actor.remove();
        actor.addAction(Actions.removeActor());
    }

根据我的经验,在 迭代 时调用 将中断循环,因为它正在从正在主动迭代的数组中删除参与者。actor.remove()stage.getActors()

一些类似数组的类会针对这种情况抛出 a 作为警告。ConcurrentModificationException

所以。。。解决方法是告诉参与者稍后使用Action

    actor.addAction(Actions.removeActor());

或者。。。如果您迫不及待地想删除演员,则可以使用:SnapshotArray

    SnapshotArray<Actor> actors = new SnapshotArray<Actor>(stage.getActors());
    for(Actor actor : actors) {
        actor.remove();
    }

推荐