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

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

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

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
По умолчанию проблема с удалением элементов индексного массива

Название: Безымянный.jpg
Просмотров: 353

Размер: 174.3 Кб

все квадратики находятся в массиве. его длина-144. когда я удаляю квадратики согласно условиям игры, удаляю их и из массива соответственно. в итоге длина массива уменьшается на то количество квадратиков. что было удалено, что логично, но. квадратик с индексом 45 должен же был по идее занять позицию 42, также и квадратик 57 соответственно, должен был бы изменить свою позицию, заняв пустое место в массиве но этого не происходит. да еще и те квадратики, что занимали последние индексы в массиве, выпадают из массива почему то (количество таких квадратиков равно количеству квадратиков удаленных со сцены)


Последний раз редактировалось Don_Vislouh; 10.04.2011 в 16:21.
Старый 10.04.2011, 16:28
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Код покажите.

Старый 10.04.2011, 16:53
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
заняв пустое место в массиве но этого не происходит
Этого не может быть, если элементы удаляются правильно

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

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
то есть вы хотите сказать, что так и должно быть? квадратик 57 не должен изменить свой индекс, заменяя пустое место?

Старый 10.04.2011, 17:43
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
то есть я хочу сказать, что как раз должен, если удаление делается правильно.

Старый 10.04.2011, 19:00
Don_Vislouh вне форума Посмотреть профиль Отправить личное сообщение для Don_Vislouh Найти все сообщения от Don_Vislouh
  № 6  
Ответить с цитированием
Don_Vislouh

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
Код:
for (var ik:int = 0; ik < vsearr.length; ik++) 
         { if (((vsearr[ik]as DisplayObject).x <= maximumX) && ((vsearr[ik]as DisplayObject).y <= maximumY) && ((vsearr[ik]as DisplayObject).x >= minimumX) && ((vsearr[ik]as DisplayObject).y >= minimumY))
		 {
		
			//удалили из массива
		     vsearr.splice(vsearr.indexOf(ik), 1);
	
			  }

Старый 10.04.2011, 19:05
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 7  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Когда вы удалили элемент из массива, то vsearr.length изменился, и вы перескакиваете элементы. Нельзя обходить массив и одновременно удалять из него элементы.

Старый 10.04.2011, 19:05
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 8  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
с конца нужно цикл крутить - тогда можно удалять дальше, не начиная с начала и не обращаясь постоянно к длине массива

Старый 13.04.2011, 19:07
Don_Vislouh вне форума Посмотреть профиль Отправить личное сообщение для Don_Vislouh Найти все сообщения от Don_Vislouh
  № 9  
Ответить с цитированием
Don_Vislouh

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
вытащил из проекта кусок кода, протестил на простом примере. принцип.создаем массив с квадратиками. по клику мыши если булева переменная true а она изначально true, то по этому клику выполняется строка кода
[code=actionscript] vsearr.splice((vsearr[1]);1)[/code] переменная становится false и все последующие клики мыши будут просто показывать нам трейс индекса того квадратика на котором мы кликнули и также трейс общей длины массива. так. элемент 1 удалился правильно. но! схлопнулся массив неожиданно с другой стороны. теперь у меня квадратик, сначала имеющий индекс 0 выпал из массива, стал -1, а дальше уже пошло все по порядку. я то думал наоборот, занимают место удаленного элемента элементы с большим индексом.
теперь. если мы не только выкинем квадратик из массива но еще и напишем [code=actionscript]removeChild(e.target as DisplayObject)[/code] то квадратик удалиться. и мы получаем. -1,1,2,3..куда пропал ноль?

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

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

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


 


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


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