Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Растровая карта, подгрузка тайлами и плавный скроллинг (http://www.flasher.ru/forum/showthread.php?t=89397)

makanmel 14.12.2006 22:02

Растровая карта, подгрузка тайлами и плавный скроллинг
 
Есть растровая карта, которая подгружается кусками 256 x 256. Тайлы (tile) генерирует сервер в зависимости от масштаба (zoom) и положения карты.

Если потянуть карту мышкой, недостающие тайлы будут подгружаться. Но если тянуть далеко, то размер клипа превзойдет ограничение в 2880 x 2880.

На максимальном увеличении размер карты 2097152 x 1048576.

Можно конечно на onMouseUp создавать клип в котором тайлы заново, но тогда не будет плавности движения...

Что можно придумать?
Поможет ли мне BitMapData?

Код:

map_mc.onMouseDown = function () {
        map_mc.startDrag();
}

map_mc.onMouseUp = function () {
        map_mc.stopDrag();
        map_mc.onMouseMove = null;
        loadBase();
}

function loadBase(){
        for (i = 0; i < visibleTiles.length; i++) {
                var tileArray = visibleTiles[i];
                var tileName = "x" + tileArray[0] + "y" + tileArray[1] + "z" + zoom;
                if (visibleTilesMap[tileName]) continue;// Tile is already loaded
                visibleTilesMap[tileName] = true;
                tile_mc = map_mc.createEmptyMovieClip("tile" + tileArray[0] + "_" + tileArray[1], map_mc.getNextHighestDepth());
                tile_mc._x = (tileArray[0] * 256);
                tile_mc._y = (tileArray[1] * 256);
                tile_mc.loadMovie("GetTile.aspx?type=base" + "&x=" + tileArray[0] + "&y=" + tileArray[1] + "&z=" + zoom));
        }
}

P.S. Flash 8.

miramax 14.12.2006 22:08

Есть метод draw() класса BitmapData

etc 14.12.2006 22:12

А также scroll и copyPixels

iNils 14.12.2006 22:14

У BitmapData тоже ограничение в 2880 x 2880.
Но не понятно зачем все сразу отображать.
2'097'152 x 1'048'576 - это слишком много. Нужно отображать только видимую область + запас во все стороны. Остальное держать в памяти. И при перетаскиваниие, удалять части вышедшие за пределы отведенной границы и загружать новые.

makanmel 14.12.2006 22:24

iNils:
А если я удалю тайлы с той стороны которая вышла за границу экрана, то размер клипа автоматически уменьшится?

miramax 14.12.2006 22:26

Цитата:

Сообщение от makanmel
iNils:
А если я удалю тайлы с той стороны которая вышла за границу экрана, то размер клипа автоматически уменьшится?

Размер видимого битмапа меняться не должен

etc 14.12.2006 22:26

Уменьшится, конечно. А в чём проблема-то?

makanmel 14.12.2006 22:35

__etc:
Проблема в том что мне сказали переделать сайт с Javascript'а на Flash, а я знаком с последним только две недели, и не хочется наступать на грабли.

All:
Сейчас попробую будет ли размер клипа уменьшаться при удалении невидимых тайлов. Пока всем спасибо. :)

iNils 14.12.2006 22:40

Цитата:

Сообщение от makanmel
iNils:
А если я удалю тайлы с той стороны которая вышла за границу экрана, то размер клипа автоматически уменьшится?

Надо не только удалять но и выгружать, так как если вы будете хранить на максимальном увеличении все куски карты размером в 2880 на 2880, то у вас таких кусков будет как минимум 265'121. У любого пользователя машина сразу же загнется. Объем требуемой памяти будет 2'199'023'255'552 * 3

miramax 14.12.2006 22:42

Цитата:

Сообщение от makanmel
__etc:
Проблема в том что мне сказали переделать сайт с Javascript'а на Flash, а я знаком с последним только две недели, и не хочется наступать на грабли.

Несколько миллионов пикселов..... А ты случайно не гугл мапс делаешь ?


Часовой пояс GMT +4, время: 12:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.