PDA

Volledige versie bekijken : duplicateMovieClip kan geen movieClip copieren


Althalus
%Europe/Berlin %853 %2010, 20:28
Als iemand een betere titel heeft, please let me know. ;)

Ik heb de gebruikelijke functie van het internet gedownload om een MovieClip te copieëren.

Nu wil ik vanuit een mc een functie aanroepen om de mc te copieren en dat doe ik met:


mc.addEventListener(MouseEvent.CLICK,expand);



Expand ziet er zo uit:


private function expand(evt:MouseEvent):void
{
var mc = duplicateDisplayObject(evt.currentTarget, true) as MovieClip;
mc.x -= 100; // shift to see duplicate
stage.addChild(mc);
}


Nu krijg ik een error die ik niet helemaal begrijp:

1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:DisplayObject.

Ik denk dat hij er vanuit gaat dat het dus niet bekend is bij het klikken of er sprake is van een MovieClip. Hij zal dus niet zeker zijn van het kunnen copieëren.

Is het waar wat ik denk? En hoe kan ik dan wel mijn movie copieëren?

Jan
%Europe/Berlin %879 %2010, 21:06
Hoe ziet die duplicateDisplayObject functie eruit.

Jan

Althalus
%Europe/Berlin %880 %2010, 21:07
public function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {
var targetClass:Class = Object(target).constructor;
var duplicate:DisplayObject = new targetClass() as DisplayObject;

// duplicate properties
duplicate.transform = target.transform;
duplicate.filters = target.filters;
duplicate.cacheAsBitmap = target.cacheAsBitmap;
duplicate.opaqueBackground = target.opaqueBackground;
if (target.scale9Grid) {
var rect:Rectangle = target.scale9Grid;

if (Capabilities.version.split(" ")[1] == "9,0,16,0"){
// Flash 9 bug where returned scale9Grid as twips
rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
}

duplicate.scale9Grid = rect;
}

// Flash 10 only
// duplicate.graphics.copyFrom(target.graphics);

// add to target parent's display list
// if autoAdd was provided as true
if (autoAdd && target.parent) {
target.parent.addChild(duplicate);
}
return duplicate;
}


Het gaat hier natuurlijk om een DisplayObject en ik heb een MovieClip nodig. Zou dat het zijn? Ik dacht dat ik met deze alles zou kunnen copieëren.

Jan
%Europe/Berlin %887 %2010, 21:18
evt.currentTarget is een Object terwijl die functie een DisplayObject verwacht, dus had je een extra cast nodig.
var mc = duplicateDisplayObject(evt.currentTarget as DisplayObject, true) as MovieClip;
Die 'as MovieClip' heb je (tot nu toe) niet nodig.

Jan

Althalus
%Europe/Berlin %892 %2010, 21:25
Hij geeft inderdaad geen error meer en lijkt te werken hoewel het resultaat nog niet zichtbaar is. Ik ga kijken of hij hem nu daadwerkelijk copieeerd.

-----------===[Althalus]===----------

Edit 1:

Het lijkt er op alsof hij niks copieerd. Ik heb nu deze code in mijn expand functie:

var mc:MovieClip = duplicateDisplayObject(evt.currentTarget as DisplayObject, false) as MovieClip;
mc.width = 1000; // shift to see duplicate
log(mc.width.toString());
stage.addChild(mc);


Hij geeft geen error, maar de mc.width = 0 in de log.

Edit 2:

Als ik hem copieer krijg ik in mijn log een goeie waarde van de .x maar niet van de .width. Beetje raar niet?