Flashhilfe.de - Flash Community

[ AS3 ] Funktion zum Klonen jeglicher Objekte [Flash 9]

 


AntwortenRegistrieren Seite1  

burnZ#1
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

17.09.2007, 02:55

Da es in AS3.0 ja in dem Sinne kein duplicateMovieClip mehr gibt, habe ich eine kleine Funktion gebastelt mit der sich jegliche Objekte, und damit auch alle die von DisplayObject ableiten ganz einfach klonen lassen:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import flash.utils.describeType;

/**
* Klont ein Objekt und gibt es wieder.
*
* @param   referent   Referenz Objekt.
* @return  Object
*/

function cloneObject( reference:Object ):Object
{
   // definition holen
   var type:XML = describeType( reference );
         
   // klon anlegen
   var clone:* = new reference.constructor;
            
   // accessor durchlaufen
   for each( var accessor:XML in type.accessor ) if( accessor.@access.toString().toUpperCase() == 'READWRITE' ) clone[ accessor.@name ] = reference[ accessor.@name ];

   // klon wiedergeben
   return clone;
}


Beispiel:

ActionScript:
1
2
3
4
5
6
7
import flash.text.TextField;

var original:TextField = addChild( new TextField() ) as TextField;
original.text = "Clone me!";

var clone:TextField = addChild( cloneObject( original ) ) as TextField;
clone.y = 100;
Geändert von burnZ am 17.09.07 um 03:00 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016


burnZ#2
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

Themenautor/in

17.09.2007, 12:27

Hmmm wenn ich darüber nachdenke könnte es bei Bitmaps usw sein das diese ne Apezialbehandlung brauchen, aber eigentich gibt es da ja extra eine Methode vor Ort

springer#3
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

25.09.2007, 11:32

sehr nützlich. hat bei mir allerdings erst mit der änderung des rückgabewerts funktioniert...


ActionScript:
1
2
3
4
function cloneObject( reference:Object ):DisplayObject
{
    .....
}


lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
burnZ#4
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

Themenautor/in

25.09.2007, 11:35

naja das kannst ja typecasten! is ja nicht immer displayobject was du klonen willst...

Werbung
Beiträge: 0
Registriert: Feb 2016


springer#5
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

25.09.2007, 11:36

nur funzzt das beispiel dann so nicht wie dus geschrieben hast...

aber egal, nützlich ist es trotzdem!
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 25.09.07 um 11:37 Uhr
burnZ#6
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

Themenautor/in

25.09.2007, 13:02

sicher? bei mir hat es das doch ... hmmmmmmm ^^

springer#7
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

25.09.2007, 14:13

der compiler spuckt das hier aus...

ActionScript:
11118: Implizite Umwandlung von einem Wert mit statischem Typ Object in einen möglicherweise nicht verwandten Typ flash.display:DisplayObject.



klonen geht schon mit object, aber nicht in verbindung mit addChild(...)
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 25.09.07 um 14:14 Uhr
burnZ#8
Benutzerbild von burnZ
Beiträge: 2827
Wohnort: Bayern
Registriert: Aug 2005

Themenautor/in

25.09.2007, 15:06

ach ich iddi dann hab ich nur was vergessen:

ActionScript:
1var clone:TextField = addChild( cloneObject( original ) as TextField ) as TextField;
Geändert von burnZ am 25.09.07 um 15:06 Uhr
springer#9
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

25.09.2007, 15:18

perfekt !

gruss

lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Kajestux#10
Benutzerbild von Kajestux
Beiträge: 1
Registriert: Nov 2007

03.11.2007, 16:22

Hi,
erstmal ein "Hallo" von mir, ich bin neu hier.

Ich habe burnZ gepostete Funktion:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function cloneObject( reference:Object ):DisplayObject
{
    // definition holen
    var type:XML = describeType( reference );
           
    // klon anlegen
    var clone:* = new reference.constructor;
               
    // accessor durchlaufen
    for each( var accessor:XML in type.accessor ) if( accessor.@access.toString().toUpperCase() == 'READWRITE' ) clone[ accessor.@name ] = reference[ accessor.@name ];

    // klon wiedergeben
    return clone;
}

umgeschrieben das als Rückgabewert der Typ "DisplayObject" ist und rufe sie wie folgt auf:
ActionScript:
1var clone:MovieClip = addChild( cloneObject( mc_test) as MovieClip ) as MovieClip;

wobei das "mc_test" ein einfacher MovieClip auf meiner Bühne ist. Es erscheint keine Fehlernachricht aber es wird auch kein sichtbarer Clon angelegt.
Was mache ich da falsch?
Vielen Dank schon einmal im Vorraus :)

Kajestux

Psycho2481#11
Benutzerbild von Psycho2481
Beiträge: 144
Wohnort: Belgien
Registriert: Jan 2008

05.05.2008, 09:07

Das ist wohl echt ne Schande, dass duplicateMovieClip nicht mehr gibt...

Ich habe das gleiche Problem wie Kajestux. Ich hab auch schon das Element getract und es sieht laut Console alles sauber aus, aber angezeigt wird der MC leider nicht.

Hat niemand eine Idee wiso, weshalb, warum? (wer nicht fragt bleibt dumm ;-) )

------------------------------
2b||!2b

gz, Psycho2481
2B || !2B

gz, Psycho2481
der_hess#12
Benutzerbild von der_hess
Beiträge: 115
Registriert: Mar 2006

05.05.2008, 09:51

Ich hab im Netz eine Lösung mit Hilfe von ByteArray gefunden. Gefällt mir persönlich n bissl besser, ist aber sicher ne kleine Geschmackssache und es gibt probleme bei dynamisch geladenen Assets :-/

ActionScript:
1
2
3
4
5
6
7
8
9
function clone(source:Object):* {
    var copier:ByteArray = new ByteArray();
    copier.writeObject(source);
    copier.position = 0;
    return(copier.readObject());
}

// Anwendung:
newObjectCopy = clone(originalObject);


Hab die Methodik vom kirupa Forum
http://www.kirupa.com/forum/showthread.php?p=1897368
http://niko.informatif.org/blog/2007_07_20_clone_an_object_in_as3
http://www.newgrounds.com/bbs/topic/831704

Gruß
Flo

-- http://www.derhess.de --
Gruß
Flo

-- http://www.derhess.de --

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de