displayObjects

Intrebari despre Actionscript 3.0

displayObjects

Mesajde myth » Mie Iun 08, 2011 3:31 am

Sal... am o problema la care nu gasesc raspuns... pe scurt dau load la o imagine externa si pe urma as vrea sa duplic acel display object pt a nu da load de 2 ori la aceasi imagine... tot ce am gasit este functia aceasta dar cand o atribui displayu obect la movieclip imi da eroare


Cod: Selectaţi tot
package {

import flash.display.DisplayObject;
import flash.geom.Rectangle;
import flash.system.Capabilities; // version check for scale9Grid bug

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;
}

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


in locu unde am gasit functia asta scria ca se apeleaza cu
Cod: Selectaţi tot
var mc:MovieClip =  duplicateDisplayObject(displayObject, true);
dar nu merge

ma chinui deja de 3 ore si tot nu gasesc o solutie.. stie careva cum se face? :|

am mai incercat si cu mc.addChild(duplicateDisplayObject(displayObject, true)); dar chiar daca nu am mai luat eroare tot nu merge; initial am vrut sa mai creez un display object si sa-l instantiez dar se pare ca-i clasa abstracta si nu merge instantierea... mai este o alta cale?
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: displayObjects

Mesajde alexxcz » Mie Iun 08, 2011 7:13 am

In primul rand daca folosesti imagini, nu SWF-uri, e bine sa folosesti Bitmap ca sa afisezi imaginea, asta iti returneaza si proprietatea content. Ca sa faci o copie a acestei imagini poti sa folosesti un obiect de tip BitmapData si sa copiezi continutul cu metoda draw() a acestei clase.
Uite un exemplu in care incarc o poza si ii fac o copie.
Cod: Selectaţi tot
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoad);
loader.load(new URLRequest("image.jpg"));

function onImageLoad(e:Event):void
{
        // Adauga pe scena imaginea incarcata
   addChild(e.target.content);
   // Creeaza o copie a imaginii incarcate
   var bmd:BitmapData = new BitmapData(e.target.content.width, e.target.content.height);
   bmd.draw(e.target.content);
   bm = new Bitmap(bmd);
        // Adauga copia pe scena
   addChild(bm);
   bm.x = e.target.content.width;
}

Codul nu e foarte organizat, dar momentan ma cam grabesc.
“First, solve the problem. Then, write the code.”
(John Johnson)
Avatar utilizator
alexxcz
 
Mesaje: 620
Membru din: Lun Iul 21, 2008 9:12 pm
Localitate: Braila

Re: displayObjects

Mesajde myth » Mie Iun 08, 2011 1:30 pm

mersi mult.. exact asta cautam :)
myth
 
Mesaje: 51
Membru din: Lun Mai 04, 2009 5:23 pm

Re: displayObjects

Mesajde george.profenza » Mar Iun 21, 2011 5:05 pm

Alternativ, poti folosi metoda clone() pt. a obtine copia imaginii incarcate prin proprietatea bitmapData a clasei Bitmap:

Cod: Selectaţi tot
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoad);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
loader.load(new URLRequest("image.jpg"),new LoaderContext(true));

function onImageLoad(event:Event):void{
   // Creeaza o copie a imaginii incarcate
   var cloneData:BitmapData = Bitmap(event.target.content).bitmapData.clone();
   // Adauga copia pe scena
   var clone:Bitmap = addChild(new Bitmap(cloneData)) as Bitmap;
   clone.x = e.target.content.width;
}
function onSecurityError(event:SecurityErrorEvent):void {
   trace(event.text);
}
function onIOError(event:IOErrorEvent):void {
   trace(event.text);
}


Alt mic detaliu e ca ambele variante (prin draw() sau clone()) acceseaza pixelii imaginii incarcate. Fie imaginea incarcata e pe acelasi domeniu ca swf care incarca (cel mai probabil), fie domeniul de pe care se incarca imaginea area un crossdomain.xml care permite domeniului pe care swf-ul care incarca imaginea access catre resurse...daca area vreo noima ce scriu :)

Ideea e ca poti sa folosesti si clone() daca ti se pare mai simplu. Ai grija la erori, si daca incarci de pe alt domeniu iti trebuie un crossdomain pe acel domeniu.
george.profenza
 
Mesaje: 57
Membru din: Mie Aug 13, 2008 11:42 am

Re: displayObjects

Mesajde Barna Biro » Mar Iun 21, 2011 6:11 pm

daca incarci de pe alt domeniu iti trebuie un crossdomain pe acel domeniu.

Exceptie daca nu accesezi resursele din Flash direct ci le accesezi prin intermediul unui script server-side ( PHP de ex ) care poate sa accesez resursele si de pe alt domeniu fara ca un crossdomain.xml sa existe neaparat. Dupa ce scriptul a accesat resursele si le-a returnat, le poti pasa aplicatiei tale Flash.
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland


Înapoi la ActionScript 3.0

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator

cron