我使用 LibGDX 并且只在我的游戏中移动相机。昨天我找到了一种在我的游戏中画出地面的方法。我正在尝试制作 Flappy Bird 的克隆,但在绘制屏幕上移动的地面时遇到问题。在每次渲染调用中,我都会向 . 添加一个新Actor
的Stage
,但几次之后,绘图不再流动。每秒帧数下降得非常快。还有其他方法可以在游戏中吸引人吗?
问问题
18802 次
3 回答
21
如果我没看错,你的问题是一旦演员离开屏幕,他们仍在被处理并导致延迟,你希望他们被删除。如果是这种情况,您可以简单地遍历舞台中的所有演员,将他们的坐标投影到窗口坐标,并使用这些来确定演员是否在屏幕外。
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已经完全滚出屏幕,可以被移除。
于 2014-03-02T17:04:05.820 回答
19
对@kabb的解决方案稍作调整:
for(Actor actor : stage.getActors()) {
//actor.remove();
actor.addAction(Actions.removeActor());
}
actor.remove()
根据我的经验,在迭代stage.getActors()
时调用会破坏循环,因为它正在从正在迭代的数组中删除参与者。
一些类似数组的类会
ConcurrentModificationException
针对这种情况抛出一个警告。
所以......解决方法是告诉演员稍后用Action
actor.addAction(Actions.removeActor());
或者...如果您出于某种原因等不及要删除演员,您可以使用SnapshotArray
:
SnapshotArray<Actor> actors = new SnapshotArray<Actor>(stage.getActors());
for(Actor actor : actors) {
actor.remove();
}
于 2015-08-16T19:10:27.137 回答
5
从调用它的方法的父级中移除一个actor的最简单remove()
方法。例如:
//Create an actor and add it to the Stage:
Actor myActor = new Actor();
stage.addActor(myActor);
//Then remove the actor:
myActor.remove();
于 2015-01-06T21:16:01.703 回答