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

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

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

Регистрация: Jun 2010
Адрес: A(undefined,undefined)
Сообщений: 87
Записей в блоге: 2
The bomb! Связывание массивов

У меня есть 2 объекта. Они грубо говоря забирают из _root массив ATR.

в них написанно

var A:Array = _root.ATR

анологично во 2 ом объекте.

Получается такая штука что когда я допустим в одном объекте в массиве A меняю значение A[x]['hjdsfhsdhf']=1. ТО в _root.ATR меняется значение тоже на 1.

Старый 24.09.2010, 09:53
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Сложные типы передаются по ссылке, а не по значению.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Код AS1/AS2:
var A:Array = _root.ATR.slice();

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

Регистрация: Mar 2006
Сообщений: 92
Вот уж никак не думал, что вопрос в который я уперся вчера, сегодня поднимется на форуме.
По сути понятно, а вот как избавится от этого?
А у меня это всё идет ещё и глубже. Приведу свой пример:
Есть некий клип-редактор.
Есть главный массив в котором куча элементов.
Этот главный массив, сохраняется в шареде.
То есть типа так:
Код AS1/AS2:
save.data.mainData=mainArray
Для редактирования, берем элемент из главного массива, например mainArray[1] и
делаем так:
Код AS1/AS2:
editorMC.array0=mainArray[1][0]
editorMC.array1=mainArray[1][1]
editorMC.array2=mainArray[1][2]
Затем, используя значения из массивов editorMC.array0...editorMC.array(X)
выполняем в клипе редакторе некие действия.
А дальше начинается проблема:
Мы что то изменяем в редакторе, и затем, мы хотим либо сохранить изменения, либо нет. Так вот не проходит такая фишка, ибо (в дебаггере замечательно видно), как только мы изменяем что то в этих дочерних массивах editorMC.array0...editorMC.array(X), то изменения сразу происходят не только в главном массиве, а и даже и в save.data.mainData.
Пробовал сделать так:
Сохранять данные из редактируемого элемента (перед редактированием), во временном массиве, и если не нужны изменения, восстанавливать данные из него.
Прикол в том, что в нем данные точно так же изменяются, синхронно с остальными
Как это победить?

Добавлено через 1 минуту
Упс, пока писал ответ уже есть
Спасибо попробую. Я тоже подумал, что нужно использовать не простое приравнивание, а что то из других методов.

Старый 24.09.2010, 14:59
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 5  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Разве concat() не быстрее считается?

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

Регистрация: Jun 2010
Адрес: A(undefined,undefined)
Сообщений: 87
Записей в блоге: 2
Попробовал так:

Код AS1/AS2:
onClipEvent(load) {
	var ATR = _root.ATRB.slice()
	trace ('M1:'+ATR[0]['ATTACK_MAX'])
	trace ('R:'+_root.ATRB[0]['ATTACK_MAX'])
	ATR[0]['ATTACK_MAX'] = 10;
	trace ('M1:'+ATR[0]['ATTACK_MAX'])
	trace ('R:'+_root.ATRB[0]['ATTACK_MAX'])
}
Код:
M1:1100
R:1100
M1:10
R:10
ЗЫ: Знаю что писать в объектах не желательно. Просто для теста.

Должно быть:

Код:
M1:1100
R:1100
M1:10
R:1100

Старый 02.10.2010, 20:03
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Вы сказали массив, а на деле у Вас хэш. Как вариант напишите свой clone, на базе for in.

Старый 02.10.2010, 20:05
Avrilka вне форума Посмотреть профиль Отправить личное сообщение для Avrilka Найти все сообщения от Avrilka
  № 8  
Ответить с цитированием
Avrilka

Регистрация: Jun 2010
Адрес: A(undefined,undefined)
Сообщений: 87
Записей в блоге: 2
Я ненастолько продвинут )
Цитата:
Как вариант напишите свой clone, на базе for in.
- что это значит?

Добавлено через 8 минут
Через циклы передачу осуществлять?

Добавлено через 51 час 39 минут
Разобрался со всем

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

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

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


 


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


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