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

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

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

Регистрация: Oct 2009
Сообщений: 3
По умолчанию Не удаляются элементы массива

Здравствуйте!
Я в данный момент только начал изучать ActionScript и в учебных целях решил сделать игру аналогичную вот этой.
У меня возникла проблема с генерацией "потолка" и "пола". Вот какой алгоритм я избрал:
1. У нас есть "кирпичик" в виде movieclip'а, из которого мы будем строить неровную поверхность.
2. В цикле Event.ENTER_FRAME:
  • добавляем кирпичик на сцену и помещаем его в массив
  • для последнего элемента массива устанавливаем положение на экране
  • пробегаем по каждому элементу массива, где проверяем: если элемент массива вышел за пределы экрана, то удаляем его

То есть, по моему замыслу, существовать будут только те movieclip'ы, которые видны на экране, а уйдя за его пределы, они будут уничтожаться и всем будет хорошо.
Но в результате совсем не так, и я не понимаю, почему.

Вот кусочек кода, который за это отвечает:
Код AS3:
for (var i:uint = 0; i < wallArr.length; i++) {
	if (wallArr[i].x < 0) {
		trace(i+" is OUT!");
		wallArr.splice(i,1);
	}
}
Как видите, для проверки корректности работы я трейсом вывожу на экран элементы массива, которые удовлетворяют этому условию. Всё выводится правильно - как только movieclip'ы начинают выходить за пределы экрана, мы начинаем получать "0 is OUT!". Соответственно, если закомментировать "wallArr.splice(i,1);" то начинаем получать номера всех элементов массива, находящихся за пределами экрана. То есть, условие поставлено верно и, вроде бы, элементы массива даже удаляются.
Однако, если трейсить wallArr.length, то мы увидим, что массив абсолютно не уменьшается. И в результате, когда он разрастается до неимоверных пределов, всё начинает дико тормозить (что естественно).
И ещё, справедливы ли мои подозрения, что у меня неправильный подход, и удаление элемента из массива в данном случае не повлечёт за собой удаление movieclip'a со сцены?

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

Кстати, сдаётся мне, что тут можно сделать всё проще, но я не знаю, как. Может, можно в AS3 как-то удалить со сцены все movieclip'ы, которые удовлетворяют тем или иным условиям (в данном случае выходят за пределы экрана)?


Последний раз редактировалось iNils; 08.01.2011 в 11:42.
Создать новую тему   Часовой пояс GMT +4, время: 21:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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