从舞台上移除演员?
2022-09-02 23:24:09
我使用LibGDX,在游戏中只移动相机。昨天,我建立了一种在游戏中绘制地面的方法。我正在尝试制作Flappy Bird的克隆,但我在绘制在屏幕上移动的地面时遇到问题。在每次渲染调用中,我都会向 添加一个新的渲染,但几次后,绘图不再流动。每秒帧数下沉非常快。有没有另一种方法可以在游戏中平局?Actor
Stage
我使用LibGDX,在游戏中只移动相机。昨天,我建立了一种在游戏中绘制地面的方法。我正在尝试制作Flappy Bird的克隆,但我在绘制在屏幕上移动的地面时遇到问题。在每次渲染调用中,我都会向 添加一个新的渲染,但几次后,绘图不再流动。每秒帧数下沉非常快。有没有另一种方法可以在游戏中平局?Actor
Stage
如果我没看错的话,你的问题是,一旦演员离开屏幕,他们仍然在被处理并导致滞后,你希望他们被删除。如果是这种情况,您只需循环遍历舞台中的所有角色,将其坐标投影到窗口坐标,然后使用这些坐标来确定演员是否不在屏幕外。
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 已完全从屏幕上滚动,可以将其删除。
对@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();
}