call a function of external swf from main timeline

Λύσεις προβλημάτων για το δημοφιλές πρόγραμμα κατασκευής παρουσιάσεων στο διαδίκτυο.

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

Απάντηση
mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 30 Απρ 2010 19:18

Καλησπέρα,

Έχω 2 κουμπιά στο main timeline, το ένα λέγεται "projects by client" και το άλλο "projects by category".

Έχω ένα external projects.swf το οποίο έχει 2 functions CLIENTS_CLICK and CATEGORIES_CLICK. Ο κώδικας είναι στο πρώτο frame του projects.fla actions layer και όχι σε κλάση.

Πως μπορώ να έχω πρόσβαση σ'αυτές τις 2 functions από το main timeline?

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 30 Απρ 2010 19:25

flash actionscript 3 χρησιμοποιώ.

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

call a function of external swf from main timeline

Δημοσίευση από HeRu » 30 Απρ 2010 20:33

Ο επίσημος τρόπος είναι να χρησιμοποιήσεις το ApplicationDomain.

Εναλλακτικά θα μπορούσες να φτιάξεις μια βοηθητική class, όπου το swf που φορτώνεται θα "δηλώνει" τον εαυτό του. π.χ.(untested)

Η class

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

package
{
public class MovieAccess{
    public static var CurrentMC:Object;
}
}
Στο "loaded.swf" στο πρώτο frame actions

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

import MovieAccess;
MovieAccess.CurrentMC = this;
Και στο main timeline

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

import MovieAccess;

function callCLIENTS_CLICK():void
{
    if(MovieAccess.CurrentMC)
        MovieAccess.CurrentMC.CLIENTS_CLICK();
}

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 30 Απρ 2010 20:44

Ok, θα το προσπαθήσω.

Να σε ρωτήσω, αν κάνω μια κλάση projects.as και βάλω σ'αυτήν τον κώδικά μου με τις 2 functions και εννοείται όλο τον υπόλοιπο κώδικα, και στο main timeline στα 2 κουμπιά προσθέσω Listeners όπου οδηγούν σε μία function που δημιουργεί ένα Object lκάπως έτσι:
var prrojects=new Projects();
pr.CATEGORIES_CLICK();

είναι εφικτό?


mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 02 Μάιος 2010 14:07

δοκίμασα το παράδειγμα με τη βοηθητική κλάση που είπες, έχω όμως ένα θεματάκι.

Στο mainTimeline έχω την εξής function:

function callCLIENTS_CLICK():void
{
loadSection("projects.swf");
if(MovieAccess.CurrentMC)
MovieAccess.CurrentMC.CLIENTS_CLICK();
}

Αυτό που γίνεται είναι το εξής: Όταν πατάω το κουμπί clients που βρίσκεται στη maintimeline και καλεί την callCLIENTS_CLICK() πρώτα πρέπει να φορτώσω το projects.swf και μετά να καλέσω την CLIENTS_CLICK.

Το πρόβλημα είναι ότι την πρώτη φορά που κάνω κλικ δε γίνεται τίποτα, από τη δεύτερη φορά και μετά λειτουργούν τα πράματα.

Τι πρέπει να κάνω;

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 02 Μάιος 2010 14:13

οκ βλακεία μου, το έλυσα.

Τον κώδικα

if(MovieAccess.CurrentMC)
MovieAccess.CurrentMC.CLIENTS_CLICK();
}

τον έβαλα αφού έγινε load to projects.swf.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 03 Μάιος 2010 11:56

τώρα έχω ένα άλλο πρόβλημα και δεν ξέρω πως να το προσεγγίσω.

Στο εξωτερικό αρχείο που φορτώνω, το οποίο δείχνει projects ανά κατηγορία ή projects ανά πελάτη έχω χρησιμοποιήσει SWFAddress. Όταν παίζει μόνο του λειτουργεί μια χαρά.

Όταν φορτώνεται στο mainTimeline με το πάτημα των αντίστοιχων κουμπιών έχω κάποια προβλήματα.
1) Το SWFAddress λειτουργεί μέχρι ένα σημείο, πιο συγκεκριμένα το κουμπί back του browser φτάνει μέχρι το σημείο που φορτώθηκε το συγκεκριμένο εξωτερικό αρχείο το projects.swf και δε πηγαίνει για παράδειγμα στην προηγούμενη σελίδα π.χ. about.swf.
Αλλά ίσως εδώ να μην έχω κάνει εγώ κάτι καλά στην Main

2)Πέρα από το SwfAddress δε μου λειτουργεί το βασικό Load, unload. Δηλαδή όταν φορτώνω για παράδειγμα το about.swf και μετά το contact.swf λειτουργεί μια χαρά, ξεφορτώνει το πρώτο και φορτώνει το δεύτερο. Όταν όμως φορτώσω το projects.swf μετά το about.swf λειτουργούν καλά, από κει και πέρα όμως αν ξαναφορτώσω το projects.swf το about.swf δεν ξεφορτώνει.

Ξέρω είναι λίγο ασαφές αν δεν το δει κάποιος στην πράξη απλά θέλω να ξέρω αν είναι πρόβλημα λογικής και δομής του κώδικά μου ή πρέπει να προσέξω κάτι στα external swf;

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

call a function of external swf from main timeline

Δημοσίευση από HeRu » 03 Μάιος 2010 12:27

Μάλλον θα πρέπει να δεις το Documentation του SwfAddress και να δεις μήπως με κάποιον τρόπο το κάνεις reset.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 03 Μάιος 2010 12:31

να κάνω reset επειδή εμπλέκεται το εξωτερικό αρχείο ε; διαφορετικά δε θα είχε πρόβλημα;

το ένα πρόβλημα μετά το άλλο..

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

call a function of external swf from main timeline

Δημοσίευση από HeRu » 03 Μάιος 2010 12:45

Είναι λίγο δύσκολο να σου πω κάτι συγκεκριμένο χωρίς να ξέρω πως έχεις δομήσει το app σου.

Αλλά γενικά προσπάθησε το SwfAdd να το χειρίζεσαι από ένα κεντρικό σημείο για όλα σου τα swf. Ίσως με κάποια static class.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 03 Μάιος 2010 12:49

ναι έχεις δίκιο δύσκολα να καταλάβει κανείς πως είναι δομημένο το συγκεκριμένο project.

απλά έχω 2 βδομάδες που έχω ξεκινήσει με flash actionscript 3 και όλα ακόμα είναι αρκετά θολά. θέλει χρόνο αλλά δυστυχώς δεν υπάρχει.

σ'ευχαριστώ!

nkast
Δημοσιεύσεις: 137
Εγγραφή: 15 Νοέμ 2009 20:31
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από nkast » 03 Μάιος 2010 17:17

mgiota έγραψε:2)Πέρα από το SwfAddress δε μου λειτουργεί το βασικό Load, unload. Δηλαδή όταν φορτώνω για παράδειγμα το about.swf και μετά το contact.swf λειτουργεί μια χαρά, ξεφορτώνει το πρώτο και φορτώνει το δεύτερο. Όταν όμως φορτώσω το projects.swf μετά το about.swf λειτουργούν καλά, από κει και πέρα όμως αν ξαναφορτώσω το projects.swf το about.swf δεν ξεφορτώνει.
Δηλαδή βλέπεις το about και το projects ταυτοχρονα; Δεν μoιαζει να εχει σχέση με το SWFAddress. Κάποιο λάθος με το κωδικα που κανει add και remove το child.

Φτιαξε καλύτερα ενα μηχανισμό να το χειρίζεσαι.
ενα παράδειγμα (απο μνήμης):

class ContentMgr extends EventDispatcher
{
private var container:DisplayObject;
private var content:DisplayObject;

public function ContentMgr(container:DisplayObject)
{
super();
this.container = container;
}

public function AddContent(content:DisplayObject):DisplayObject
{
RemoveContent();
this.content = content;
this.container.addChild(content);
return content;
}

public function RemoveContent(content:DisplayObject):DisplayObject
{
if(content!=null)
this.container.removeChild(content);
return content;
}

}


Στο main και σε καθε MC που φορτώνει αλλα SWF, βαλε ενα:
var cmgr:ContentMgr;
και στο constructor:
cmgr = new ContentMgr(this);

Οταν θελεις να εμφανίσεις πράγματα, μην χρησιμοποιήσεις addChild/removeChild.
Να τα περνάς όλα μεσα απο το ContentMgr:
cmgr.AddContent(mymc);
Αυτο θα αφαιρεί το προ\ϊγουμενο MC και θα εμφανίσει το επόμενο.
Αργοτερα μπορεις να προσθεσεις και αλλα καλούδια οπως transitions.

mgiota
Δημοσιεύσεις: 190
Εγγραφή: 15 Σεπ 2009 13:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

call a function of external swf from main timeline

Δημοσίευση από mgiota » 03 Μάιος 2010 17:23

ναι όντως είχα λάθος στο πως πρόσθετα και αφαιρούσα το child. το ψιλοέλυσα αυτό, μου προέκυψε κάτι άλλο.

θα δοκιμάσω την προσέγγιση που είπες και θα οργανώσω καλύτερα την αρχιτεκτονική του προγράμμτος γιατί εκεί βρίσκεται το πρόβλημα.

thanks!

Απάντηση

Επιστροφή στο “Flash γενικά”

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

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