2011-04-29 89 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