當我有大量編輯這個問題提供更多的細節大小限制繪製CanvasRenderingContext2D
通過EaselJS框架繪製CanvasRenderingContext2D,當我遇到的限制來了。我的對象是這樣的:
但是當這些物體的位置超過幾百萬像素的圖紙開始崩潰分開。這是與x位置58524928相同的對象。(父容器移動到-58524928,以便我們可以在舞臺上看到該對象。)偏移對象越多,它將崩潰越多。另外,當我嘗試移動物體時 - 用鼠標拖動它 - 它會像跳躍一樣受到大網格的影響。
這是EaseJS框架和形狀最終吸引到通過的drawImage()方法CanvasRenderingContext2D。下面是從代碼段:
ctx.drawImage(cacheCanvas,this._cacheOffsetX + this._filterOffsetX,this._cacheOffsetY + this._filterOffsetY,cacheCanvas.width /秤,cacheCanvas.height /刻度);
我想這事做實數的JavaScript中的有限數量:
注意,有無窮多個實數,但只有有限的 數人(18437736874454810627,是精確)可以完全用JavaScript浮點格式表示 。這意味着當您在使用JavaScript中的實數時, 的數字通常是實際數字的近似值。
來源:JavaScript: The Definitive Guide
有人可以證實/拒絕我的假設? 5800萬(58524928)對我來說似乎並不那麼重要,它是EaselJS的一些低效率還是Canvas的限制?
PS: 縮放無效。我已經把所有東西縮小了1000倍,並且縮小了1000倍,而沒有任何效果。同樣,如果您將對象縮放1000倍,而x仍爲5800萬,則它看起來不會崩潰。但把它移到500億,你就是你開始的地方。細節基本上偏移除以大小是不變的限制。
EDIT
下面是示例jsfiddle.net/wzbsbtgc/2。基本上有兩個獨立的問題
- 如果我使用巨大的數字作爲繪圖本身的參數(紅色曲線)它將被扭曲。這可以通過使用較小的數字並移動DisplayObject(藍色曲線)來避免。
- 在這兩種情況下,都不可能將DisplayObject移動1px。我認爲這是在GameAlchemist的文章中解釋的。
對於第二個問題的任何建議/解決方法是值得歡迎的。
縮放沒有效果。我已經把所有東西縮小了1000倍,並且縮小了1000倍,而沒有任何效果。同樣,如果您將對象縮放1000倍,而x仍爲5800萬,則不會顯得崩潰。把它移到500億,你就是你開始的地方。基本上偏移量*的大小是不變的限制細節。 – 2015-02-13 21:42:25
您能否確認正在繪製的Shape實例是否被緩存(通過'cache()'方法)?從你提供的圖像看,它看起來像是一個矢量繪製,其值越來越混亂,但是你張貼來自EaselJS的緩存內容繪製例程的代碼。我想確認你在做什麼,以便我可以嘗試重現。 – gskinner 2015-02-17 17:32:36
嗨格蘭特,沒有圖紙沒有被緩存,你說什麼意味着我通過張貼在這裏被裁剪了一個錯誤。這就是爲什麼我需要在如此大的畫布上繪製如此多的細節http://wikibudgets.org/w/uk/london/greenwich/2015/。順便說一句,我是你從Flash時代的樂趣:) – 2015-02-17 17:38:11