Форум 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=138347)

oam333 05.04.2010 16:26

Тормоза после минутного таскания карты мышкой
 
Есть сервер, где картинки лежат с именем типа x46_y67.png, где x и y - требуемые для карты координаты.

Есть алгоритм:

I. Добавление тайлов.
1. Создаю основной пустой мувиклип.
2. При запуске swf создаю пустой массив (var tile_list: Array = [];) координат тайлов, которые будут подгружаться/удаляться на/с основной мувиклип.
3. При каждом отпускании мышки после перетаскивания карты делаю следующее:
- если двигали влево, то в цикле находим самый левый тайл каждой координаты "y" и смотрим, не пора ли нарисовать рядом с ним еще один;
- если пора, то - уменьшаю "икс"-овый номер тайла на единицу и записываю номер нового тайла так:
Код AS1/AS2:

tx = tile_list[min].t_tx - 1; //min - номер найденного тайла в массиве
ty = tile_list[min].t_ty;

где tx и ty - часть имени тайла, который лежит по пути www.site.ru/x46_y67.png (т.е. в данном примере tx=46 и ty=67);
- после этого создаю в основном мувиклипе новый мувик для нового тайла и запоминаю его координаты в массив tile_list:
Код AS1/AS2:

//min - номер найденного самого левого тайла в массиве
var mc:MovieClip = mc_map.createEmptyMovieClip("mc_tile_" + tx + "_" + ty, mc_map.getNextHighestDepth());
mc_map["mc_tile_"+tx+"_"+ty]._x = tile_list[min].t_x - 256; //"икс"-овая координата нового тайла
mc_map["mc_tile_"+tx+"_"+ty]._y = tile_list[min].t_y; //"игрек"-овая координата нового тайла
mc_map["mc_tile_"+tx+"_"+ty].loadMovie("http://site.ru/x"+tx+"_y"+ty+".png");
tile_list[i_tile] = new Object();
tile_list[i_tile].t_tx = tx; //часть имени файла тайла на сервере
tile_list[i_tile].t_ty = ty; //часть имени файла тайла на сервере
tile_list[i_tile].t_x = mc_map["mc_tile_"+tx+"_"+ty]._x; //
tile_list[i_tile].t_y = mc_map["mc_tile_"+tx+"_"+ty]._y;
i_tile++; //количество тайлов в массиве tile_list

После этого снова проверяем не надо ли еще добавить к левой части новый тайл. Если надо, то операция повторяется, если не надо, то таким же образом смотрим все остальные 3 стороны карты.

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

II. Удаление тайлов.
Поиск вышедших за пределы экрана тайлов происходит примерно так же, как и выше, т.е. вышедшие за пределы вообразимой границы тайлы находятся 100%, в этом я уверен.
Последовательность удаления тайлов:
Код AS1/AS2:

mc_map["mc_tile_"+tx+"_"+ty].removeMovieClip();
tile_list.splice(min,1); //min - номер тайла в массиве, который нужно удалить
//но после этого почему-то место в массиве становится "undefined"
//долго не стал разбираться почему это и создаю новый массив уже без этих "undefined"
var tmp_tile = null;
var tmp_tile: Array = [];
for (k = 0; k < tile_list.length; k++) {
        if (tile_list[k] != undefined) {
                tmp_tile.push(tile_list[k]);
        }
}
tile_list = null;
tile_list = tmp_tile;
tmp_tile = null;

Это пример для удаления, если мы двигали в одну сторону. Примерно также делается для остальных трех сторон.
Создание и удаление тайлов вынес в две разные функции. Если закомментировать функцию удаления, то тормоза начинаются намного раньше и сильнее, чем если не комментировать.
Массивов больше нет никаких.

Теперь вопрос:
правильно ли я удаляю то, что создал? Потому что где-то после минутного таскания мышкой долго начинают отрисовываться вновь создаваемые тайлы и загрузка процессора под 100%. И с каждым последующим тасканием - все дольше и дольше.
Ощущение такое, что где-то что-то я не доудалил...

Добавлено через 42 минуты
Вопрос снят.
i_tile забыл уменьшать при удалении мувиков.

random13 05.04.2010 17:28

а что за проект делаете, очень интерено, или это военная тайна?

oam333 05.04.2010 17:47

Цитата:

Сообщение от random13 (Сообщение 898166)
а что за проект делаете, очень интерено, или это военная тайна?

карта города, ничего необычного

random13 05.04.2010 17:59

а есть что посмотреть, если есть то мона и через личку если не хатите ссылки палить, я сам заинтересован проектом, счас делаю как раз веб карту с подобным функционалом, можно было бы пообщаться на эту тему

oam333 05.04.2010 18:05

Цитата:

Сообщение от random13 (Сообщение 898174)
а есть что посмотреть, если есть то мона и через личку если не хатите ссылки палить, я сам заинтересован проектом, счас делаю как раз веб карту с подобным функционалом, можно было бы пообщаться на эту тему

см. личку

random13 05.04.2010 18:07

странно но в личке пусто


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

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