Гибкая прокрутка более 10.000 пикселей - PullRequest
0 голосов
/ 29 апреля 2011

Контейнер Flex Canvas ограничен 10 000 x 100 000 пикселей. Тем не менее, я видел приложения Flex, которые прокручивают более 10000 пикселей. Есть идеи, как это можно сделать?

Контент, который я хочу прокрутить, уже разбит на части, но мне нужно добавить эти фрагменты к чему-то, что может прокручиваться по вертикали более, чем на 10000 пикселей.

1 Ответ

1 голос
/ 29 апреля 2011

В зависимости от того, что вы действительно хотите отобразить, вы можете разделить ваш контент на плитки.Так работает Google Maps, каждый раз, когда карта перемещается, программа определяет, какие плитки видны на экране, и загружает их. Любые маркеры или наложения на карте уведомляются о перемещении карты и определяют, где их новое местоположение.является.Если их местоположение находится за пределами экрана, их можно удалить с холста.Например, ширина всех плиток на уровне масштабирования 20 на Картах Google составляет (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) и окне (640,408), вы поместите его в (200, 100), и он будет виден на экране.

Вместо того, чтобы просто устанавливать видимое значение в true или false, лучшим подходом будет полное удаление элементов с холста, когда они не находятся в границах представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...