我使用LibGDX並只移動相機在我的遊戲中。昨天我創立了一種在我的比賽中取得勝利的方式。我試圖製作一個Flappy Bird的克隆,但是我在繪製在屏幕上移動的地面時遇到了問題。在每次渲染調用中,我會在Stage
中添加一個新的Actor
,但幾次之後,繪圖就不再流淌了。每秒幀數非常快。遊戲中還有另外一種方法來吸引觀衆嗎?從舞臺上移除演員?
14
A
回答
17
如果我正確地閱讀,你的問題是,一旦演員離開屏幕,他們仍然在處理,造成滯後,你想他們被刪除。如果是這樣,您可以簡單地遍歷舞臺中的所有演員,將其座標投影到窗口座標,並使用這些座標確定演員是否在屏幕外。
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();
}
如果演員中的x座標窗口再加上它的寬度小於0,演員已經完全滾動離開屏幕,並且可以被移除。
5
從其父母中刪除一名演員的最簡單方法是調用其方法remove()
。例如:
//Create an actor and add it to the Stage:
Actor myActor = new Actor();
stage.addActor(myActor);
//Then remove the actor:
myActor.remove();
12
的解決方案從輕微的調整@kabb:
for(Actor actor : stage.getActors()) {
//actor.remove();
actor.addAction(Actions.removeActor());
}
從我的經驗,呼籲actor.remove()
而迭代stage.getActors()
,將打破循環,因爲它從正在積極迭代的數組中移除actor。
對於這種情況,一些類似數組的類會拋出
ConcurrentModificationException
作爲警告。
所以......解決辦法是告訴演員們用自己的Action
actor.addAction(Actions.removeActor());
或者刪除後 ...如果你不能等待刪除演員出於某種原因,您可以使用SnapshotArray
:
SnapshotArray<Actor> actors = new SnapshotArray<Actor>(stage.getActors());
for(Actor actor : actors) {
actor.remove();
}
相關問題
- 1. 輸入舞臺和演員
- 2. 如果物品在舞臺上從舞臺上移除多個孩子
- 3. 移除舞臺上的精靈as3
- 4. 導演,舞臺,小組,演員,Box2D和手勢演員的例子LibGdx
- 5. 在KineticJS中移除舞臺
- 6. 需要一些關於在舞臺上移動演員的指南libgdx
- 7. LibGDX:讓舞臺上的所有演員不被檢查
- 8. libGDX:按名稱從舞臺獲得標籤演員
- 9. 無法從舞臺上刪除對象
- 10. ActionScript 3 - 從舞臺上刪除視頻
- 11. 從舞臺上刪除精靈
- 12. 試圖從舞臺上刪除MovieClip
- 13. Flex Mobile 4.6 StageVideo不會從舞臺上移除
- 14. 有問題可以從舞臺上移除裝載機
- 15. AS3:確定DisplayObject何時從舞臺上移除?
- 16. 當從舞臺上移除光標時,Eventlistener不在收聽
- 17. (libgdx/scene2d)與演員等創建不同的舞臺
- 18. 職位子級演員相對於舞臺而不是家長
- 19. 如何在演員添加到舞臺時添加回調?
- 20. LIBGDX爲主菜單創建演員和舞臺
- 21. 舞臺中的演員不會更新MoveTo XY位置
- 22. 從舞臺上調用Movieclip
- 23. 如何芭蕾舞女演員
- 24. 終止一個揮舞阿卡演員
- 25. 從舞臺
- 26. 移除舞臺上的所有實例as3
- 27. 當它離開舞臺時從陣列中移除物體AS3
- 28. 爲什麼我的物品不能從舞臺上移開? AS2
- 29. 如何從Composer運行芭蕾舞演員程序?
- 30. 使用舞臺和演員的libGDX在臺式機和Android手機上產生不同的拍攝角度
只需要在演員不可見時刪除演員? –