我正在繪製比畫面大很多倍的畫布應用程序。 我需要一些建議/方向如何。巨大的畫布繪畫應用程序
基本上我想要的是滾動這個大畫布,只繪製在可見區域。 我在想的兩種方法:
- 有無64×64(或其他)「磚」上繪製,然後在滾動只加載新的瓷磚。
- 記錄所有用戶筆畫(點)和滾動計算哪些在指定的區域,並繪製它們,只使用屏幕大小畫布。
如果這個問題,我使用cocos2d原型。
我正在繪製比畫面大很多倍的畫布應用程序。 我需要一些建議/方向如何。巨大的畫布繪畫應用程序
基本上我想要的是滾動這個大畫布,只繪製在可見區域。 我在想的兩種方法:
如果這個問題,我使用cocos2d原型。
忘記2000x200的限制,我有一個開源項目,可以繪製18000 x 18000的NASA圖像。
我建議你把這個任務分成兩部分。首先,滾動。正如CodaFi所建議的,當您滾動時,您將提供CATiledLayers。其中的每一個都將是您創建的CGImageRef - 您真正巨大的畫布的子圖像。然後,您可以輕鬆支持放大和縮小。
第二部分是與用戶交互繪製或以其他方式影響畫布。當用戶停止滾動時,您將創建一個不透明的UIView子類,並將其作爲子視圖添加到主視圖中,並覆蓋承載CATiledLayers的視圖。目前你需要顯示這個視圖,你用適當的信息填充它,以便它可以正確地繪製你的較大畫布的那個部分(比如在這種和那種顏色的這個點上的一個圓圈等)。
您將使用此覆蓋視圖的drawRect:方法執行繪製。因此,當用戶採取更改視圖的操作時,需要根據需要執行「setDisplayInRect:」以強制iOS調用drawRect :.
當用戶決定滾動時,您需要隨着用戶所做的任何更改更新大型畫布模型,然後移除不透明疊加層,並讓CATiledLayers繪製大圖像的適當部分。這種轉變可能是避免視覺故障的過程中最棘手的部分。
假設您有大量用於畫布的對象定義。當你需要爲一個圖塊創建一個CGImageRef時,你需要掃描它,尋找對象的圖框和圖塊的框架之間的重疊,然後才能繪製該圖塊所需的項目。
在Apples中有一個平鋪示例ScrollViewSuite與繪圖部分沒有任何關係,但它可能會給你一些關於如何管理圖塊部分的想法。
是啊,謝謝,我看到了那個視頻,主意很不錯。雖然我正在考慮爲此使用opengl。 – 2012-07-09 21:46:48
許多移動設備不支持2048x2048以上的紋理。因此,我建議:
這可能是最有效的方法。 64x64的貼圖實在太小了,而且效率不高,因爲「繪製貼圖」調用會有大量的重複開銷。
您可以使用CATiledLayer。 查看WWDC2010會話104
但對於cocos2d,它可能無法正常工作。
也許一些CATiledLayer卡在自己的scrollView中會是完美的。 – CodaFi 2012-04-20 20:18:23