2011-04-29 38 views
0

Flex Canvas容器限制爲10,000x10,000像素。然而,我已經看到了滾動方式超過10,000像素的Flex應用程序。任何想法如何做到這一點?Flex滾動超過10,000像素

我想要滾動的內容已經存在,但我需要將這些片段添加到可以垂直滾動超過10,000個像素的內容。

+0

實際上Canvas沒有像10kx10k最大尺寸那樣的限制。你是怎麼想出來的? – 2DH 2011-04-30 01:57:22

+0

嘿,你是對的!有趣的事情;如果你去閱讀Canvas,它推薦使用2個Spark容器,它們都被限制爲10kx10k ......非常奇怪。謝謝。 – 2011-05-07 09:22:23

+0

我實際上並沒有做太多的Flex 4編程,但是從我寫的一些代碼片段來測試10kx10k的限制,我可以清楚地看到該組不會受到任何限制 - 它會高興地將自己設置爲例如20k高度。 – 2DH 2011-05-07 18:01:18

回答

1

根據您實際想要顯示的內容,您可能能夠將您的內容拆分爲圖塊。這就是谷歌地圖的工作方式,每次移動地圖時,程序都會確定屏幕上顯示哪些圖塊並將其加載。地圖上的任何標記或覆蓋圖都會通知地圖已移動並確定其新位置的位置是。如果他們的位置離開屏幕,他們可以從畫布上移除。例如,Google地圖上縮放級別爲20的所有圖塊的寬度爲(256像素* 2^20),等於總像素數268,435,456。

本質上你只需要創建一個特殊的Sprite來跟蹤實際的x,y位置。無論何時容器移動,只需遍歷所有子對象並確定將它們放在哪裏。

function onCanvasScroll() { 
    //determine the top left coordinates of the canvas 
    //you will figure out how to do this depending on how the scrolling window 
    //is implemented 
    var canvas_scroll_x; 
    var canvas_scroll_y; 

    //create a bounding box for the canvas 
    var view_bounds = new Rectangle(canvas_scroll_x, canvas_scroll_y, canvas.width, canvas.height); 

    for (child in canvas) { 
     var x = child.actual_x - view_bounds.x; 
     var y = child.actual_y - view_bounds.y; 

     var childBounds = new Rectangle(x, y, child.width, child.height); 
     //determine if the component is visible on screen 
     if (view_bounds.intersects(child_bounds)) { 
      child.visible = true; 
      child.x = x; 
      child.y = y; 
     } 
     else { 
      child.visible = false; 
     } 

    } 
} 

所以,如果你有一個位於(100,20000)畫布,使位於(300,20100)一個精靈,和一個窗口,是(640408),你會放置在( 200,100),它會在屏幕上顯示。

不僅僅是將true設置爲true或false,更好的方法是當它們不在視圖的邊界內時將其完全移除。

+0

你好。有趣。我還沒有嘗試過。但我想知道滾動條。他們將如何調整大小並滾動以匹配內容? – 2011-04-29 05:06:05

+0

我應該認爲必須確定內容的大小並手動設置滾動條的大小。如果滾動條沒有實際綁定到畫布上,那麼我認爲您可以更改滑塊的大小。我的經驗是用簡單的actionscript而不是flex,所以我不確定flex在這方面的工作原理。 – 2011-04-29 05:13:45