Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как копировать объект вручную перебрав свойства (http://www.flasher.ru/forum/showthread.php?t=174544)

rezachez 27.01.2012 23:10

Как копировать объект вручную перебрав свойства
 
Код AS3:

var imageHolder:MovieClip = (MovieClip)(imageHolders[i]);
var copyImageHolder:MovieClip;
for each (prop in imageHolder)
{
    copyImageHolder[propName] = prop;
}

Как в ручную копировать массив со свойствами, если их много и по именам не перебрать.

СлаваRa 27.01.2012 23:26

Код AS3:

(MovieClip)(imageHolders[i]);

Взорвало мозг, или я может чего не знаю просто, Вы что вообще хотите сделать то?

rezachez 27.01.2012 23:30

Как клонировать или копировать объект со всеми свойствами. Мне нужно два одинаковых объекта.

Добавлено через 39 секунд
Свойств много. По именно перебрать не могу.

КорДум 27.01.2012 23:37

Код AS3:

var imageHolder:MovieClip = (MovieClip)(imageHolders[i]);

Это не шарп.
Код AS3:

var imageHolder:MovieClip = imageHolders[i] as MovieClip;


rezachez 27.01.2012 23:47

Цитата:

Сообщение от КорДум (Сообщение 1059535)
Код AS3:

var imageHolder:MovieClip = (MovieClip)(imageHolders[i]);

Это не шарп.
Код AS3:

var imageHolder:MovieClip = imageHolders[i] as MovieClip;


Спасибо за поправку, и все-таки как копировать свойства объекта, если их много?

Dukobpa3 27.01.2012 23:49

Сам не пробовал, предположительно можно что-то типа такого:

Код AS3:

var origMC:Sprite = new Sprite()
var cloneMC:Sprite = new Sprite()
 
for (var key:String in origMC)
{
    cloneMC[key] = origMC[key]
}

Ну плюс надо рекурсивно вглубь каждого свойства влазить еще, а то так только верхний уровень скопируется. Писать неохота, разобраться не сложно, идея ясна.

Добавлено через 1 минуту
а, ну еще надо предусмотреть ситуацию с ридонли свойствами. Как минимум try... catch всунуть.

-De- 27.01.2012 23:57

Вообще-то "шарповский" каст в as3 есть (в шарпе каст с as тоже есть). Он вообще function style cast (т.е. MovieClip(imageHolders[i]); ), но как у топикстартера - тоже валидная запись. Отличие такого каста от as (как и в шарпе) - если скастовать невозможно, то будет exception, а не молчаливый возврат null.
По теме ничо хорошего не скажу %) Я бы сделал руками метод clone(), где руками перебирал бы свойства. Наверно с помощью describeType и такой-то матери таки можно автоматически вытянуть все свойства и тип обьекта и перебрать. Можно ещё погуглить as3 reflections, вроде даже местный народ писал обёртку к describeType. Но это медленно, не вижу тут дзена.

Dukobpa3 28.01.2012 00:01

-De-
Плюсую к рукописному clone()

silin 28.01.2012 00:18

перебор
Код AS3:

for (var key:String in origMC)

не в тему совсем, он не даст ничего, кроме динамических (origMC["myProp"] = "xxx" ) свойств
как уже сказали, самое простое это самому задать необходимые свойства
что-то типа такого
Код AS3:

var cloneMC:*= new (Object(origMC).constructor as Class)();
 
var props:Array = ["rotation", "x", "y"];
for each(var prop:String in props)
{
        cloneMC[prop] = origMC[prop];
}


Inet_PC 28.01.2012 00:43

ну или через ByteArray, но клон правильнее и надежнее, но можно забыть обновлять метод.


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

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