![]() |
|
||||||||||
|
|||||
|
У меня есть 2 объекта. Они грубо говоря забирают из _root массив ATR.
в них написанно var A:Array = _root.ATR анологично во 2 ом объекте. Получается такая штука что когда я допустим в одном объекте в массиве A меняю значение A[x]['hjdsfhsdhf']=1. ТО в _root.ATR меняется значение тоже на 1. ![]() |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Сложные типы передаются по ссылке, а не по значению.
|
|
|||||
|
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 92
|
Вот уж никак не думал, что вопрос в который я уперся вчера, сегодня поднимется на форуме.
По сути понятно, а вот как избавится от этого? А у меня это всё идет ещё и глубже. Приведу свой пример: Есть некий клип-редактор. Есть главный массив в котором куча элементов. Этот главный массив, сохраняется в шареде. То есть типа так: Для редактирования, берем элемент из главного массива, например mainArray[1] и делаем так: editorMC.array0=mainArray[1][0] editorMC.array1=mainArray[1][1] editorMC.array2=mainArray[1][2] выполняем в клипе редакторе некие действия. А дальше начинается проблема: Мы что то изменяем в редакторе, и затем, мы хотим либо сохранить изменения, либо нет. Так вот не проходит такая фишка, ибо (в дебаггере замечательно видно), как только мы изменяем что то в этих дочерних массивах editorMC.array0...editorMC.array(X), то изменения сразу происходят не только в главном массиве, а и даже и в save.data.mainData. Пробовал сделать так: Сохранять данные из редактируемого элемента (перед редактированием), во временном массиве, и если не нужны изменения, восстанавливать данные из него. Прикол в том, что в нем данные точно так же изменяются, синхронно с остальными ![]() Как это победить? Добавлено через 1 минуту Упс, пока писал ответ уже есть ![]() Спасибо попробую. Я тоже подумал, что нужно использовать не простое приравнивание, а что то из других методов. |
|
|||||
|
Попробовал так:
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']) } Должно быть: |
|
|||||
|
Вы сказали массив, а на деле у Вас хэш. Как вариант напишите свой clone, на базе for in.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Я ненастолько продвинут )
Цитата:
Добавлено через 8 минут Через циклы передачу осуществлять? Добавлено через 51 час 39 минут Разобрался со всем |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|