簡體   English   中英

增量圖

[英]incremental drawing

我試圖在一個單獨的線程中在畫布上增量繪制波形,即在線程的每個循環中僅繪制硬件最近獲取的部分,而不重新繪制整個曲線。

我不確定是否可以依靠SurfaceHolder.unlockCanvasAndPostSurfaceHolder.lockCanvas之間保留的畫布內容。

該文檔似乎對此不太明確,我的實驗給出了令人驚訝的結果:在繪圖線程的兩個后續循環中返回的畫布的“舊”內容有所不同。 看起來好像交替使用了兩個畫布(但是我檢查了-它是同一畫布,但是內容不同)。

我發現重現此行為的最簡單方法是:

  1. 導入LunarLander示例應用程序。

  2. 在LunarView.run方法中,在循環中插入sleep(500)指令。

  3. 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM