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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2010, 11:41
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 1  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
По умолчанию работа с изменяющимися массивами

Здравствуйте.
есть такая задача.
на вход флешки из внешней программы поступаем строка значений объекта вида:
1,1,200,250;0,2,600,300;2,22,100,500;
где первое значение - это тип объекта
второе значение - ID объекта
третье значение - координата Х
четвертое значение - координата Y.

я эту строку при помощи .split(";") загоняю в массив
потом пробегаю по этому массиву и расставляю соответствующие типы в нужные координаты, добавляя на сцену при помощи addChild(нужный тип)

но стока значений периодически меняется - и значения в ней тоже могут быть разными.

каким образом отследить что оставить на сцене, что удалить и что добавить

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


ломаю голову - уже закипел.
может кто то подскажет направление

Старый 10.11.2010, 11:50
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Ну вы как-то храните айдишники того, что у вас на сцене. Тогда обьекты с новыми айдишниками - добавить, со старыми - оставить, каких нет - удалить. В чём проблема?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 10.11.2010, 11:54
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 3  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Самый простой вариант (но не самый лучший) - удалить ВСЁ и заново добавить из нового массива
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 10.11.2010, 12:01
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 4  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
re: leofit
в том то и дело что удалять все не надо. те объекты, ID которых сново есть в строке значений должны бить оставлены.

re: -De-
я не совсем могу понять как это мне сделать. сравнить две строки, значения которые совпали пометить в массив - оставить.
а как потом выделить объекты которые надо удалить и те что добавить.

плюс как удалить объект, если его ID и индекс при добавлении через addChild могу не совпадать

Старый 10.11.2010, 12:09
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
При добавлении добавляйте объекты в хэш (Object), при получении строки проверяйте, есть ли объект такого типа (ну или какой там у вас параметр является уникальным) в хэше, просто передвигаете его, если нет создаете новый и добавляете в словарь. Все типы (непосредственно строка которая обозначает тип) которые есть в полученных значениях складываете попутно в другой хэш (временный). После того как все значения будут обработаны, зачишаете основной хэш: проходитесь по основному хешу и если в нем попадается тип, которого нет во временном хэше, убираете объект такого типа из списка отображения и удаляете его из хэша.

Старый 10.11.2010, 12:16
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 6  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Ну сделать подумав мозжечком и такой-то матерью три набора айдишников, один - новые из массива, второй - старые, которые на сцене, третий - все, какие есть. Для всех айдишников из 3-го: если айдишник есть в 1-м, но нет во 2-м, то что делаем? если есть во 2-м, но нет в 1-м, то что делаем? если есть в 1-м и втором, то что делаем? Если нет ни в 1-м ни во 2-м, то стреляемся, т.к. не понятно, как он тогда попал в 3-й.
Хранить соответствие ID-обьект, индекс обьекта в дисплей листе - часто ненадёжное число, удалять не по индексу, а по обьекту, removeChild(objByID[ID])
Собсно надо уметь использовать Object и цикл for(var key:String in myObject) по нему. Хотя можно и на массивах.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Например так:
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.
Старый 10.11.2010, 12:18
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 8  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Думаю, что в данной ситуации в самый раз будет применение Dictionary вместо Array, Vector или Object
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 10.11.2010, 12:30
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Как раз в данной ситуации Dictionary не удобен, ввиду того, что у него в качестве ключа выступают объекты вместо id

Старый 10.11.2010, 12:44
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Что-то типа

Код AS3:
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);
DataBase#

Код AS3:
var list:Object = {};
 
function getObjectById(id:String):CustomObject {
    return list[id] as CustomObject;
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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