[英]incremental drawing
我試圖在一個單獨的線程中在畫布上增量繪制波形,即在線程的每個循環中僅繪制硬件最近獲取的部分,而不重新繪制整個曲線。
我不確定是否可以依靠SurfaceHolder.unlockCanvasAndPost
和SurfaceHolder.lockCanvas
之間保留的畫布內容。
該文檔似乎對此不太明確,我的實驗給出了令人驚訝的結果:在繪圖線程的兩個后續循環中返回的畫布的“舊”內容有所不同。 看起來好像交替使用了兩個畫布(但是我檢查了-它是同一畫布,但是內容不同)。
我發現重現此行為的最簡單方法是:
導入LunarLander示例應用程序。
在LunarView.run方法中,在循環中插入sleep(500)指令。
在LunarView.doDraw方法中,將以下行注釋掉: canvas.drawBitmap(mBackgroundImage, 0, 0, null);
,這會刪除舊內容。
運行游戲,讓飛船崩潰。 您將看到飛船的中間位置,但它們會閃爍:奇數和偶數位置將交替顯示。
因此,我的問題是:我們可以繪制僅對之前繪制的內容添加更改的圖片嗎?如果可以,是否有記錄在案的方法來處理上述奇怪行為?
月球着陸不緩存。 每次繪制(刷新)背景圖像,然后繪制飛船。
private void doDraw(Canvas canvas) {
// Draw the background image. Operations on the Canvas accumulate
// so this is like clearing the screen.
canvas.drawBitmap(mBackgroundImage, 0, 0, null);
仔細檢查您的If子句。 也許是真假交替。 這將導致事物快速連續繪制,然后不再繪制。
如果需要輸出布爾值,請使用Log,以查看是否正在更改。
如果失敗,則改為以下游戲循環。
http://blorb.tumblr.com/post/236799414/simple-java-android-game-loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.