|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2009
Адрес: Иваново
Сообщений: 26
|
Тормоза после минутного таскания карты мышкой
Есть сервер, где картинки лежат с именем типа x46_y67.png, где x и y - требуемые для карты координаты.
Есть алгоритм: I. Добавление тайлов. 1. Создаю основной пустой мувиклип. 2. При запуске swf создаю пустой массив (var tile_list: Array = [] координат тайлов, которые будут подгружаться/удаляться на/с основной мувиклип. 3. При каждом отпускании мышки после перетаскивания карты делаю следующее: - если двигали влево, то в цикле находим самый левый тайл каждой координаты "y" и смотрим, не пора ли нарисовать рядом с ним еще один; - если пора, то - уменьшаю "икс"-овый номер тайла на единицу и записываю номер нового тайла так: tx = tile_list[min].t_tx - 1; //min - номер найденного тайла в массиве ty = tile_list[min].t_ty; - после этого создаю в основном мувиклипе новый мувик для нового тайла и запоминаю его координаты в массив tile_list: //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 После того, как отрисовали, надо же удалить то, что вышло за пределы экрана, чтобы не тормозило ничего и память не кушало? Поэтому пишем вторую функцию, которая будет все это дело удалять: II. Удаление тайлов. Поиск вышедших за пределы экрана тайлов происходит примерно так же, как и выше, т.е. вышедшие за пределы вообразимой границы тайлы находятся 100%, в этом я уверен. Последовательность удаления тайлов: 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 забыл уменьшать при удалении мувиков. |
|
|||||
Регистрация: Jun 2009
Адрес: Иваново
Сообщений: 26
|
карта города, ничего необычного
|
|
|||||
Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
|
а есть что посмотреть, если есть то мона и через личку если не хатите ссылки палить, я сам заинтересован проектом, счас делаю как раз веб карту с подобным функционалом, можно было бы пообщаться на эту тему
__________________
Коллекционирую чужие ActionScript Блоги |
|
|||||
Регистрация: Jun 2009
Адрес: Иваново
Сообщений: 26
|
см. личку
|
Часовой пояс GMT +4, время: 22:26. |
|
« Предыдущая тема | Следующая тема » |
|
|