2012-08-06 219 views
1

我嘗試使用HTML5畫布嘗試創建一些動畫。我的最終目標是能夠將一個盒子動畫製作到一個特定的位置,現在我只是在整個屏幕上對它進行動畫製作。當我在屏幕上移動它時,我留下了黑色的痕跡,如何在不移除背景網格的情況下清除此「髒」部分?HTML5畫布動畫問題

代碼的的jsfiddle是here

回答

3

兩種解決方案

  • 它移動到新位置之前重繪動漫頂部的背景。這就是所謂的骯髒精靈技術 - 更快 - 更復雜。

  • 重繪幀

之間的整個畫布如果繪製背景是一個複雜的操作牽住在另一個畫布速度緩衝準備的背景。

+0

嘿米克,你可以詳細說明這個骯髒的精靈技巧嗎? – Chris 2012-08-06 13:26:59

+0

這個答案是正確的。骯髒的精靈意味着你應該重新繪製你的背景(比如說白色),就像你之前的盒子在那裏,然後把你的盒子拖到下一個地方。 – BaL 2012-08-06 13:28:32

+0

酷 - 出於興趣,畫布中動畫的「正常」方法是每次重繪整個事物? – Chris 2012-08-06 13:35:28

1

如果你不想讓它看到,你必須清除你畫的東西。我假設你不想清除整個畫布以避免重新繪製網格並花費CPU週期。你必須以不同的方式做到這一點。

可能的解決方案:

  • 有兩個相同的屏幕上的畫布一個比其他。在畫布下面畫網格,不要清除它。清除頂部畫布的一部分並重新繪製。
  • 有一個屏幕和一個屏幕外畫布。在屏幕畫布上繪製網格。每次您設置動畫時,清除整個屏幕畫布,從另一個畫面複製準備好的網格,然後繪製您需要的畫面。
+0

在HTML頁面上看起來有點複雜。這個翻轉模式緩衝區更適用於我猜測的其他語言。 – BaL 2012-08-06 13:29:41

+0

對我來說,HTML/JavaScript中的所有內容都很複雜,但這就是天性。真的沒有簡單的解決方案(如果你知道一個我真的很想聽到它)。 將元素放在另一個上面然後分別繪製是沒問題的。 Javascript中不會超過其他任何東西。 – 2012-08-06 13:33:38

+0

當然,但你必須管理透明度或切換z級。在一張畫布上繪製所有東西並且做上面的答案顯示是否更簡單? (清理畫布或骯髒的雪碧清潔) – BaL 2012-08-06 13:36:08