我在android中創建一個小遊戲。任何需要在屏幕上繪製的東西都會擴展我的類,然後我有一個Manager
類,我可以將所有可見的遊戲對象添加到每個框架中,並告訴經理調用其中所有內容的繪圖函數。Android的位圖,繪圖和文本的繪製順序?
這裏的是對象初始化,並添加到管理:
@Override
public void surfaceCreated(SurfaceHolder holder) {
fps = new TextDrawable(Color.BLACK, 14, 100, 40, 40);
player = new Player();
map = new Map();
leftTouch = new TouchCircle(Color.GRAY);
manager.add("fpsText", fps);
manager.add("leftTouch", leftTouch);
manager.add("player", player);
manager.add("map", map);
gameloop = new GameLoop(getHolder(), this, fps);
gameloop.setRunning(true);
gameloop.start();
}
現在我遇到的問題是抽籤順序,如果你看一下對象添加到管理器,以供參考訂單..
- 我可以肯定地告訴你,玩家正在繪製在地圖頂部的 !這些都是通過繪製與
drawBitmap(..)
各自的位圖繪製的。 - 但是,fpsText和leftTouch正在繪製在地圖下面!這些分別使用
drawText(..)
和drawOval(..)
來繪製。
即使他們實現不同Canvas.draw..
的功能,我希望他們都爲了繪製成我只是通過Canvas對象,我有我的經理類,然後讓管理者循環每個對象傳遞給它的是帆布畫畫。
任何人都可以爲我澄清爲什麼位圖看起來在頂部繪製,以及解決方案應該是什麼讓我的fps和觸摸區域繪製在播放器和地圖位圖之上?我會欣賞它。
編輯:我使用private ConcurrentSkipListMap<String, VisibleObject> objectMap;
我管理器中存儲的對象和繪圖像這樣..除非你畫位圖繪製你的文字後
public void draw(Canvas c){
for (Map.Entry<String, VisibleObject> object : objectMap.entrySet()){
synchronized(object){
object.getValue().draw(c);
}
}
}
啊,這很有趣!我用我的代碼更多地編輯了我的問題..但是我使用了ConcurrentSkipListMap,並且我剛剛再次閱讀文檔,它說「地圖按照其按鍵的自然順序排序」所以我想按字母順序排列,doh! :p你最適合這種儲存容器的是什麼?非常感謝您的幫助 – Holly
是的,它意味着按字母順序排列,所以不是爲了添加元素。如果你真的需要Map,LinkedHasmap會更合適,但是從你公開的代碼中我看不到Map需要,你可以使用像ArrayList一樣的List實現。 –