我使用 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   回答