Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.04.2010, 16:26
oam333 вне форума Посмотреть профиль Отправить личное сообщение для oam333 Найти все сообщения от oam333
  № 1  
Ответить с цитированием
oam333

Регистрация: Jun 2009
Адрес: Иваново
Сообщений: 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 забыл уменьшать при удалении мувиков.

Старый 05.04.2010, 17:28
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 2  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
а что за проект делаете, очень интерено, или это военная тайна?
__________________
Коллекционирую чужие ActionScript Блоги

Старый 05.04.2010, 17:47
oam333 вне форума Посмотреть профиль Отправить личное сообщение для oam333 Найти все сообщения от oam333
  № 3  
Ответить с цитированием
oam333

Регистрация: Jun 2009
Адрес: Иваново
Сообщений: 26
Цитата:
Сообщение от random13 Посмотреть сообщение
а что за проект делаете, очень интерено, или это военная тайна?
карта города, ничего необычного

Старый 05.04.2010, 17:59
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 4  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
а есть что посмотреть, если есть то мона и через личку если не хатите ссылки палить, я сам заинтересован проектом, счас делаю как раз веб карту с подобным функционалом, можно было бы пообщаться на эту тему
__________________
Коллекционирую чужие ActionScript Блоги

Старый 05.04.2010, 18:05
oam333 вне форума Посмотреть профиль Отправить личное сообщение для oam333 Найти все сообщения от oam333
  № 5  
Ответить с цитированием
oam333

Регистрация: Jun 2009
Адрес: Иваново
Сообщений: 26
Цитата:
Сообщение от random13 Посмотреть сообщение
а есть что посмотреть, если есть то мона и через личку если не хатите ссылки палить, я сам заинтересован проектом, счас делаю как раз веб карту с подобным функционалом, можно было бы пообщаться на эту тему
см. личку

Старый 05.04.2010, 18:07
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 6  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
странно но в личке пусто
__________________
Коллекционирую чужие ActionScript Блоги

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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