|
|
|||||
[+3 02.07.08]
Регистрация: Sep 2004
Сообщений: 86
|
работа с изменяющимися массивами
Здравствуйте.
есть такая задача. на вход флешки из внешней программы поступаем строка значений объекта вида: 1,1,200,250;0,2,600,300;2,22,100,500; где первое значение - это тип объекта второе значение - ID объекта третье значение - координата Х четвертое значение - координата Y. я эту строку при помощи .split(";") загоняю в массив потом пробегаю по этому массиву и расставляю соответствующие типы в нужные координаты, добавляя на сцену при помощи addChild(нужный тип) но стока значений периодически меняется - и значения в ней тоже могут быть разными. каким образом отследить что оставить на сцене, что удалить и что добавить на мой взгляд - это нужно как то выделять все в разные массивы, но мне не совсем понятно как потом удалить нужный объект со сцены и как оставить на сцене те объекты, которые остались в строке значений. ломаю голову - уже закипел. может кто то подскажет направление |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Ну вы как-то храните айдишники того, что у вас на сцене. Тогда обьекты с новыми айдишниками - добавить, со старыми - оставить, каких нет - удалить. В чём проблема?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Dec 2009
Сообщений: 428
|
Самый простой вариант (но не самый лучший) - удалить ВСЁ и заново добавить из нового массива
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
[+3 02.07.08]
Регистрация: Sep 2004
Сообщений: 86
|
re: leofit
в том то и дело что удалять все не надо. те объекты, ID которых сново есть в строке значений должны бить оставлены. re: -De- я не совсем могу понять как это мне сделать. сравнить две строки, значения которые совпали пометить в массив - оставить. а как потом выделить объекты которые надо удалить и те что добавить. плюс как удалить объект, если его ID и индекс при добавлении через addChild могу не совпадать |
|
|||||
При добавлении добавляйте объекты в хэш (Object), при получении строки проверяйте, есть ли объект такого типа (ну или какой там у вас параметр является уникальным) в хэше, просто передвигаете его, если нет создаете новый и добавляете в словарь. Все типы (непосредственно строка которая обозначает тип) которые есть в полученных значениях складываете попутно в другой хэш (временный). После того как все значения будут обработаны, зачишаете основной хэш: проходитесь по основному хешу и если в нем попадается тип, которого нет во временном хэше, убираете объект такого типа из списка отображения и удаляете его из хэша.
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Ну сделать подумав мозжечком и такой-то матерью три набора айдишников, один - новые из массива, второй - старые, которые на сцене, третий - все, какие есть. Для всех айдишников из 3-го: если айдишник есть в 1-м, но нет во 2-м, то что делаем? если есть во 2-м, но нет в 1-м, то что делаем? если есть в 1-м и втором, то что делаем? Если нет ни в 1-м ни во 2-м, то стреляемся, т.к. не понятно, как он тогда попал в 3-й.
Хранить соответствие ID-обьект, индекс обьекта в дисплей листе - часто ненадёжное число, удалять не по индексу, а по обьекту, removeChild(objByID[ID]) Собсно надо уметь использовать Object и цикл for(var key:String in myObject) по нему. Хотя можно и на массивах.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Например так:
1) После прихода первой строки у нас формируется массив объектов вида {type:0 , id:23 , _x:150 , y:75 , rest:false} 2) Когда приходит новая строка, мы получаем из нее массив объектов вида {type:0 , id:23 , _x:150 , y:75} 3) Проверяем по id, присутствуют ли элементы из нового массива в старом. Если элемент присутствует, смотрим, нужно ли изменить его координаты и устанавливаем значение rest в true. Если элемента с таким id нет, то добавляем его в массив и опять-таки устанавливаем rest в true. 4) После перебора всех элементов второго массива, проходимся по первому массиву и удаляем все элементы, у которых rest == false. P.S. Перед перебором очередной пришедшей строки, у всех элементов массива, разумеется, свойство rest нужно сбрасывать на false. Последний раз редактировалось bav; 10.11.2010 в 12:20. |
|
|||||
.
|
Что-то типа
var o = dataBase.getObjectById(id:String):CustomObject; if (!o) { o = new CustomObject(); o.type = type; o.id = id; dataBase.addObject(o); } o.moveTo(x, y); |
Часовой пояс GMT +4, время: 04:10. |
|
« Предыдущая тема | Следующая тема » |
|
|