[AS3] load and unload external swf (how????)

ActionScript και Flex Προγραμματισμός

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Asmodeus
Δημοσιεύσεις: 36
Εγγραφή: 08 Οκτ 2005 18:44
Τοποθεσία: ΑΘΗΝΑ

[AS3] load and unload external swf (how????)

Δημοσίευση από Asmodeus » 10 Ιαν 2009 15:33

:roll: Καλησπερες παιδιά!!!
Να ρωτήσω κάτι. Θέλω να φτιάξω ένα menu που θα κάνει load + unload εξωτερικά swf αρχεία. Σε actionscript 2.0 το κατάφερνα με την loadmovienum, όμως σε actionscript 3 τι μπορεί να γίνει;;; Δεν μπορώ να τα καταφέρω με τίποτα!!! :(

Πχ έχω 4 buttons που κάνοντας κλικ στο κάθε ένα θα κατεβαίνει dropdown ένα εξωτερικό swf αρχείο. Χρειάζομαι να γίνεται και unload γιατι αν κάνει κλικ σε κάποιο άλλο button πρέπει να σβήνεται το συγκεκριμένο που άνοιξε.
Δεν ξέρω αν έγινα κατανοητός... :kaloe: plz help help help.
Μόνο οι θαρραλέοι έχουν το κουράγιο να φθάνουν εκεί που οι άγγελοι έχουν το θάρρος να πετούν...
Εικόνα

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] load and unload external swf (how????)

Δημοσίευση από HeRu » 10 Ιαν 2009 19:11

Στην AS 3.0 πρέπει να χρησιμοποιήσεις κάποια class για να φορτώσεις εξωτερικά αρχεία.

Μια πολύ απλή μορφή που μπορεί να γίνει, είναι κάπως έτσι:

Κώδικας: Επιλογή όλων

// Import τα διάφορα classes που θα χρησιμοποιήσουμε
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.MouseEvent;

// Ο loader αναλαμβάνει να φορτώνει τα αρχεία και λειτουργεί και σαν container για το εξωτερικό αρχείο.
var loader:Loader = new Loader();
// Εδώ μπορείς να τον προσθέσεις σαν child κάποιου άλλου mc π.χ. mainContent.addChild( loader );.
addChild( loader );

// Βάζεις ένα listener σε κάθε button.
myButton1.addEventListener( MouseEvent.CLICK, loadSwf1 );
myButton2.addEventListener( MouseEvent.CLICK, loadSwf2 );
myButton3.addEventListener( MouseEvent.CLICK, loadSwf3 );
myButton4.addEventListener( MouseEvent.CLICK, loadSwf4 );

// Κάθε button καλεί την custom loadMovie με το όνομα του αρχείου.
function loadSwf1( event:MouseEvent ) : void { loadMovie( "file1.swf" ); }
function loadSwf2( event:MouseEvent ) : void { loadMovie( "file2.swf" ); }
function loadSwf3( event:MouseEvent ) : void { loadMovie( "file3.swf" ); }
function loadSwf4( event:MouseEvent ) : void { loadMovie( "file4.swf" ); }

// Function που κάνει unload το προηγούμενο περιεχόμενο και κάνει load το νέο αρχείο. Το unload βασικά δεν χρειάζεται, μιας και το νέο θα σβήσει το παλιό αυτόματα.
function loadMovie( file:String ) : void
{
    loader.unload();
    loader.load( new URLRequest( file ) );
}

Άβαταρ μέλους
Asmodeus
Δημοσιεύσεις: 36
Εγγραφή: 08 Οκτ 2005 18:44
Τοποθεσία: ΑΘΗΝΑ

[AS3] load and unload external swf (how????)

Δημοσίευση από Asmodeus » 11 Ιαν 2009 23:18

Να ξερες από τι με έσωσες αυτή τη στιγμή...αχ και νάξερες!!!


Το ΣΕ ΕΥΧΑΡΙΣΤΩ είναι λίγο!
Μόνο οι θαρραλέοι έχουν το κουράγιο να φθάνουν εκεί που οι άγγελοι έχουν το θάρρος να πετούν...
Εικόνα

inde
Δημοσιεύσεις: 7
Εγγραφή: 25 Ιαν 2009 02:39

[AS3] load and unload external swf (how????)

Δημοσίευση από inde » 25 Ιαν 2009 02:51

dokimasa ton kodika, doulevei poly omorfa.. kia kanei auto pou tou zitithike.

thelo na dokimaso na kano preload kapia mc. ta opoia xrisimopoioun components, me liga logia thelo na kano load kapia mc me ena preloader, apo ena button mesa se ena menu, xoris to periexomeno auton ton mc, na epiesazei to main mc.

pos ginete auto? borousa na to kano sthn as2 alla kati ginete edo.... a nai! as3... :/

pou argotera isos ginei pio periploko// diladi...


exo ena menu_mc... mesa exo

btn_1, btn_2

exo enan fakelo pou mesa exei

main_mc.swf (to mc pou exei mesa ta koubia kai to holder gia load)

kai

to loader.swf .... to opoio tha to fonazoun kapos ta koumpia kathe fora pou tha kanoun load.

kai enan upofakelo pou tha exei mesa ta external mc... pou tha kanei call to kathe button.

content_1.swf, content_2.swf (pou borei na feroun opiodipote periexomeno theloun!)


an borei kapios as vohtheisei, exo provlhma kai prothesmia (kano proth fora oloklirom eno flash site kai exo faei palouki... baino strato se 13 meres, an den to prolavo eblexa)

euxaristo paides!

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] load and unload external swf (how????)

Δημοσίευση από HeRu » 25 Ιαν 2009 08:23

Για να χρησιμοποιήσεις έναν preloader, χρειάζονται μερικές προσθήκες. Θα κάνω comments μόνο στις γραμμές που προστέθηκαν.

Κώδικας: Επιλογή όλων

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.MouseEvent;

// Import νέα classes
import flash.events.Event;
import flash.events.ProgressEvent;


var loader:Loader = new Loader();

// Θα πρέπει να βάλουμε κάποιους listeners στον loader.
loader.contentLoaderInfo.addEventListener( Event.OPEN, preloadStart ); // Ξεκίνημα
loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, preloadProgress ); // Πρόοδος
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, preloadEnd ); // Τέλος

// Και τα αντίστοιχα handler functions.

// Εδώ βάζεις τις εντολές για να εμφανίσεις τον preloader.
function preloadStart( event:Event ) : void
{
	// π.χ.

	preloader.visible = true;

	// ή addChild( preloader );
	// ή οποιαδήποτε άλλη μέθοδο θέλεις
}

// Function που καλείτε αυτόματα ανά κάποια bytes που έχουν κατέβει.
function preloadProgress( event:ProgressEvent ) : void
{
	// Υπολογισμός ποσοστού %
	var percent:Number = ( event.bytesLoaded / event.bytesTotal );

	// Υποθέτουμε ότι ο preloader έχει μια μπάρα που μεγαλώνει ανάλογα το ποσοστό.
	preloader.preloadBar.scaleX = percent;

	// Επίσης υποθέτουμε ότι ο preloader έχει ένα textfield που εμφανίζει το ποσοστό.
	preloader.preloadText.text = int( percent * 100 );
}

// Εδώ βάζεις τις εντολές για να εξαφανίζουν τον preloader.
function preloadEnd( event:Event ) : void
{
	preloader.visible = false;

	// ή removeChild( preloader );
	// κλπ
}

addChild( loader );

/**
* Τα ίδια από εδώ και κάτω
*/
Τελευταία επεξεργασία από το μέλος HeRu την 21 Φεβ 2009 12:25, έχει επεξεργασθεί 3 φορές συνολικά.

inde
Δημοσιεύσεις: 7
Εγγραφή: 25 Ιαν 2009 02:39

[AS3] load and unload external swf (how????)

Δημοσίευση από inde » 25 Ιαν 2009 15:22

είναι απίστευτο, παλεύω εδώ και πολύ ώρα να το φτιάξω και δεν τα κατα φέρνω, θα το παλέψω μεχρι να δώ τι θα γίνει, ελπίζω να βγάλω άκρη. Δεν θέλω να γίνομαι πιεστικός, αλλα είμαι σε πολύ άσχημο σημείο, όποια παραπάνω βοήθεια (πόσο παραπάνω γίνεται?!) ειναι ευπρόσδεκτη.
Τελευταία επεξεργασία από το μέλος inde την 01 Οκτ 2009 08:22, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] load and unload external swf (how????)

Δημοσίευση από HeRu » 25 Ιαν 2009 20:41

Λοιπόν σου έφτιαξα ένα sample να δεις πως είναι. Το έκανα attach στο προηγούμενο post.

Έκανα και μια μικρή διόρθωση...το scaleX παίρνει τιμές 0-1.

inde
Δημοσιεύσεις: 7
Εγγραφή: 25 Ιαν 2009 02:39

[AS3] load and unload external swf (how????)

Δημοσίευση από inde » 26 Ιαν 2009 15:43

Φίλε μου είναι καλύτερο και απο δώρο γενεθλίων! Σε ευχαριστώ πολύ για την βοήθεια, δέν μπορώ να περιγράψω πόσο με ευχαριστεί. Κάτι που ήθελα να σου πώ, είναι οτι απο προχτές είμαι στον υπολογιστή και προσπαθώ να λύσω το πρόβλημα αυτό και απο προχτές είμαι με 4 ώρες ύπνο, μόλις έσωσες την ψυχολογική μου υγεία. Είμαι υποχρεωμένος να δηλώσω πως σαν σχεδιαστής είμαι ανα πάσα στιγμή στην διάθεσή σου.
Τελευταία επεξεργασία από το μέλος inde την 01 Οκτ 2009 08:22, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
3dViRuS
Δημοσιεύσεις: 44
Εγγραφή: 02 Μάιος 2003 04:34
Επικοινωνία:

[AS3] load and unload external swf (how????)

Δημοσίευση από 3dViRuS » 21 Μαρ 2009 01:55

Καλησπερα
να ρωτησω ποιος ειναι ο κωδικας για να κανω το external swf (το οποιο εχει preloader ) να το παιξει σε αλλο frame? px 15?

ShadowRunner
Δημοσιεύσεις: 3
Εγγραφή: 08 Ιουν 2009 05:26

[AS3] load and unload external swf (how????)

Δημοσίευση από ShadowRunner » 08 Ιουν 2009 05:52

Φίλε HeRu
Ευχαριστώ πολύ και εγώ με την σειρά μου για τον κώδικα. Μιας και έπαιζα μόνο σε as2 και εδώ και 3 μέρες είπα να πάω στην as3. Μπορείς να μου εξηγήσεις πώς στον παρακάτω κώδικα:

function Index( event:MouseEvent ) : void { loadMovie("myfile.swf"); }

Μπορώ να πώ το συγκεκριμένο function να φορτώσει το swf αυτό σε κάποιο συγκεκριμένο movie clip (center_mc) που βρίσκεται στο root ?

Τα κουμπιά μου είναι σε ένα άλλο movie clip που λέγεται "bigMenu" και θέλω όταν τα κάνω κλικ να καλούνε ένα swf στο "center_mc" που βρίσκεται στο root μου.

Με την as2 θα έγραφα με τον τρόπο που το δούλευα "_root.center_mc.loadMovie("aboutUs.swf");"

με την as3 ?

Σε ευχαριστώ πολύ, θα με σώσεις από έναν εφιάλτη 3ημερών :-?

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] load and unload external swf (how????)

Δημοσίευση από HeRu » 08 Ιουν 2009 09:21

Το μόνο που χρειάζεται να αλλάξεις είναι το addChild(). Έτσι όπως είναι τώρα προσθέτει τον loader στο root.

Κώδικας: Επιλογή όλων

addChild( loader ); 
Αν θέλεις να εμφανίζεται το περιεχόμενο σε ένα άλλο movieclip, μπορείς απλά να τον προσθέσεις στην display list του π.χ.

Κώδικας: Επιλογή όλων

center_mc.addChild( loader );

ShadowRunner
Δημοσιεύσεις: 3
Εγγραφή: 08 Ιουν 2009 05:26

[AS3] load and unload external swf (how????)

Δημοσίευση από ShadowRunner » 08 Ιουν 2009 15:58

Σε ευχαριστώ για την τόσο γρήγορη απάντηση σου... όπως καταλαβαίνεις έπεσα ξερός στο γραφείο μόλις το έστειλα και μετα :D

Το φαντάστηκα αυτό με το addChild ότι στην ουσία είναι κάποιος container που δημιουργείτε και λέει που να φορτώσει το swf και το έκανα αυτό εχθές το βράδυ διαβάζοντας τον κώδικα που έδωσες εσύ αλλά δεν δούλεψε...

κάθε φορά που γράφω μόνο το

Κώδικας: Επιλογή όλων

center_mc.addChild(menuLoader);
μου λέει 1120: Access of undefined property center_mc.

Καταλαβαίνω ότι σαν να μου λέει ότι δεν το έχω δηλώσει κάπου αλλά δεν μπορώ να φανταστώ που... και instance έχει και έτσι λέγεται..
Ο κώδικας μου είναι αυτός:

Κώδικας: Επιλογή όλων

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.MouseEvent;

var menuLoader:Loader = new Loader();
center_mc.addChild(menuLoader);
//menuLoader.scaleX = .900
//menuLoader.scaleY = .900
//menuLoader.x = 400
//menuLoader.y = 300

bIndex.addEventListener(MouseEvent.CLICK, Index);
bAbout.addEventListener(MouseEvent.CLICK, AboutUs);
bServices.addEventListener(MouseEvent.CLICK, OurServices);
bPortfolio.addEventListener(MouseEvent.CLICK, Portfolio);
bContact.addEventListener(MouseEvent.CLICK, Contact);

function Index(event:MouseEvent):void
{
	loadMovie("frondpage2.swf");
}
function AboutUs(event:MouseEvent):void
{
	loadMovie("frondpage.swf");
}
function OurServices(event:MouseEvent):void
{
	loadMovie("file3.swf");
}
function Portfolio(event:MouseEvent):void
{
	loadMovie("file4.swf");
}
function Contact(event:MouseEvent):void
{
	loadMovie("file4.swf");
}

function loadMovie(file:String):void
{
    menuLoader.unload();
    menuLoader.load(new URLRequest(file));
}


Λογικά όπως είπες και εσύ το unload δεν χρειάζεται διότι άπαξ και καταφέρουμε να φορτώσουμε μέσα στο center_mc κάποιο swf τότε λογικό είναι να κάνει unload από μόνο του.

Τι λές να φταίει ; :roll:

Άβαταρ μέλους
paink1ller
Δημοσιεύσεις: 865
Εγγραφή: 21 Ιαν 2008 19:51

[AS3] load and unload external swf (how????)

Δημοσίευση από paink1ller » 08 Ιουν 2009 20:13

Θα επρεπε να δουλευει ο κωδικας. Αρα ειτε δεν εχεις το center_mc μεσα στο stage ειτε δεν το εχεις δωσει instance name "center_mc" ωστε να το βλεπει το actioscript.

To unload χρειαζεται γιατι διαφορετικα αφηνει οτι ειχες φορτωσει πριν στην μνημη.
Ηobby: Shooting photons

ShadowRunner
Δημοσιεύσεις: 3
Εγγραφή: 08 Ιουν 2009 05:26

[AS3] load and unload external swf (how????)

Δημοσίευση από ShadowRunner » 12 Ιουν 2009 15:07

Συγνώμη για την καθυστερημένη απάντηση αλλά είχα κάτι σεμινάρια και έλειπα εκτός.
Το center_mc έχει instance name ακριβώς έτσι και στο Library είναι έτσι πάλι δηλωμένο, δεν είναι αυτό το πρόβλημα.

Πώς δουλεύει το _root στην AS3 ? εγώ εκεί υπολογίζω το λάθος.. μάλλον δεν μπορώ να του δώσω να καταλάβει ότι πρέπει να φορτώσει το συγκεκριμένο swf στο stage στο center_mc.

Αν δεν του πω να το κάνει load στο center_mc και το αφήσω

Κώδικας: Επιλογή όλων

addChild(menuLoader);
τότε το φορτώνει μια χαρά αλλά στο συγκεκριμένο movie clip όπου έχω και τα buttons και δεν το θέλω εκεί :-S

Μια βοήθεια ρε παιδιά, με έχει φάει το μυαλό :roll:

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] load and unload external swf (how????)

Δημοσίευση από HeRu » 12 Ιουν 2009 15:33

Αν έχεις τον παραπάνω κώδικα μέσα σε κάποιο MovieClip, θα πρέπει όπως είπες να χρησιμοποιήσεις το "root" ή μπορείς να βάλεις "parent" για να πας προς τα πάνω στην DisplayList.

Απάντηση

Επιστροφή στο “ActionScript και Flex Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες