[AS2] custom class για positioning αντικειμένων

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

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

Απάντηση
Άβαταρ μέλους
Garakatsamol
Honorary Member
Δημοσιεύσεις: 919
Εγγραφή: 08 Μάιος 2007 00:27

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από Garakatsamol » 24 Μαρ 2008 03:39

Έχω φτιάξει την πρώτη μου class για AS2.

Με αυτή την class μπορούμε να ορίσουμε τη θέση των αντικειμένων στο stage. Χρησιμοποιείται κυρίως όταν θέλουμε να κάνουμε full screen flash site.

Χρησιμοποιείται ώς εξής:
έχουμε 9 θέσεις που μπορεί να είναι ένα αντικείμενο:
TL: πάνω αριστερά
TC:πάνω κέντρο
TR:πάνω δεξιά
ML:μέση αριστερά
MC:μέση κέντρο
MR:μέση δεξιά
BL:κάτω αριστερά
BC:κάτω κέντρο
BR:κάτω δεξιά

η σύνταξή της έχει ώς εξής
πχ. για στοίχιση επάνω και αριστερά

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

positioning.TL(obj, topOffset, leftOffset);
όπου:
obj: το movie clip που θέλουμε να θέσουμε τη θέση του
topOffset: η απόσταση από την κορυφή
leftOffset:η απόσταση από αριστερά

πχ
η διατύπωση

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

positioning.TL("ball1", 10, 10);
τοποθετεί το movie clip με instance name ball1 στη θέση που απέχει 10 px από πάνω του stage και 10 px από αριστερά

Για τις περιπτώσεις που θέλουμε να θέσουμε το mc (movie clip) στο κέντρο ή στη μέση χρησιμοποιείται μόνο η απόσταση που δεν αναφέρεται στο κέντρο ή στη μέση δηλαδή:
για να ορίσουμε ότι το mc θα είναι πάνω και στο κέντρο θα χρησιμοποιήσουμε το παρακάτω:

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

positioning.TC(obj, topOffset);
εδώ δε χρειάζεται να ορίσουμε απόσταση από τα αριστερά ή τα δεξιά διότι το θέλουμε ακριβώς στο κέντρο. Ορίζουμε μόνο την απόσταση από πάνω

Ειδικά για την περίπτωση που θέλουμε στοίχιση μέση κέντρο η μόνη παράμετρος που χρειάζεται να δώσουμε είναι το mc

δηλαδή:

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

positioning.MC(obj);

Παρακάτω δίνω ένα παράδειγμα για να γίνει πιο κατανοητό

έστω ότι έχω 9 movie clips με Instance names
ball1, ball2,...,ball9

για να τα κάνω να εμφανίζονται στις 9 θέσεις που προαναφέρθηκαν και να μεταφέρονται αυτόματα σε αυτές τις θέσεις όταν γίνεται resize το παράθυρο, βάζω τα 9 mcs μου στο stage και τους δίνω ta instance names που ανέφερα (ball1, ball2,...,ball9)
Στη συνέχεια στο 1ο frame βάζω τον κώδικα:

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

import classes.*;
function positionStuff() {
	positioning.TL("ball1", 10, 10);
	positioning.TC("ball2", 10);
	positioning.TR("ball3", 10, 10);
	positioning.ML("ball4", 10);
	positioning.MC("ball5");
	positioning.MR("ball6", 10);
	positioning.BL("ball7", 10, 10);
	positioning.BC("ball8", 10);
	positioning.BR("ball9", 10, 10);
}
Stage.scaleMode = "noScale";
Stage.align = "tl";
stageListener = new Object();
stageListener.onResize = positionStuff;
Stage.addListener(stageListener);
positionStuff()
Πιο αναλυτικά δείτε τα αρχεία που επισυνάπτω.

Μερικές παρατηρήσεις:
1. Το Registration point των movie clips πρέπει να είναι πάνω και αριστερά.
2. Η δομή των αρχείων και των φακέλων πρέπει να είναι όπως τις δίνω στο παράδειγμα.
3. Tα mcs πρέπει να είναι στο _root

Ερωτήσεις, σχόλια και κυρίως διορθώσεις (σίγουρα θα υπάρχουν) και επεκτάσεις ευπρόσδεκτες.

Have fun! :D

Προς mods: ήθελα να το βάλω στην περιοχή με τα scripts αλλά δε με άφησε
Συνημμένα
resize.zip
κάντε resize το stage για να δείτε τη νέα θέση των αντικειμένων
(7.32 KiB) Μεταφορτώθηκε 813 φορές

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

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από HeRu » 24 Μαρ 2008 09:44

Γεια σου :)

Η πρώτη παρατήρηση μου είναι...Γιατί AS 2.0 ?

Δεν υπάρχει λόγος κάποιος να μάθει μια γλώσσα προγραμματισμού που είναι αρκετά outdated. Οι διαφορές της με την AS 3.0 είναι αρκετές, και νομίζω ότι δεν είναι σωστό να σπαταλάς τις δυνάμεις σου μαθαίνοντας την AS 2.0.

Σε λίγο καιρό θα βγει και η AS 4.0 που θα έχει ακόμα μεγαλύτερο χάσμα, και εάν τελικά αποφασίσεις να την μάθεις, θα πρέπει να ξεμάθεις πολύ περισσότερα.

Τώρα, όσο για την class που δημιούργησες αυτές είναι οι παρατηρήσεις μου:
  • Γιατί έχεις βάλει "var obj = obj;" σε όλες τις methods ?
  • Γιατί περνάς το movieclip σαν String, ενώ μπορείς να το χρησιμοποιήσεις κατευθείαν ?
  • Θα πρέπει να προσπαθείς να μην χρησιμοποιείς root σε προγραμματισμό. Το root είναι χρησιμο για απλά actions, αλλά σε classes θα πρέπει να το αποφεύγεις και να χρησιμοποιείς _parent / this.
  • Καλό θα ήταν να διαμορφώσεις την class να μπορεί να τοποθετεί τα mc όχι μόνο στο stage, αλλά σε οποιοδήποτε mc που περιέχεται μέσα σε ένα άλλο mc. Δηλαδή να μπορεί να χρησιμοποιεί σαν "stage" ένα άλλο mc.
Συνολικά είναι ωραίο που χρησιμοποίησες το "static". Επίσης είναι πολύ καλή ενέργεια που έβαλες κάποιο offset.

Αυτά προς το παρόν, καλή συνέχεια. :)

p.s. : Εάν θέλεις να ασχοληθείς με AS 3.0, ορίστε ένα καλό μέρος να ξεκινήσεις. 12 Great Ways to Learn ActionScript 3 in Flash

Άβαταρ μέλους
Garakatsamol
Honorary Member
Δημοσιεύσεις: 919
Εγγραφή: 08 Μάιος 2007 00:27

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από Garakatsamol » 24 Μαρ 2008 13:04

Ευχαριστώ για τις παρατηρήσεις.
Βασικά χρησιμοποιώ AS2 απλά γιατί αυτή έχω μάθει και έχω Licenced το flash 8. Είναι φυσικά στα πλάνα να μάθω AS3 με την πρώτη ευκαιρία απλώς ο χρόνος είναι λίγο περιορισμένος και μέχρι τώρα κάνω τη δουλειά μου έτσι.
Γιατί έχεις βάλει "var obj = obj;" σε όλες τις methods ?
εννοείς ότι θα έπρεπε να χρησιμοποιήσω var obj1, κτλ? χρησιμοποιώντας το static function δεν αποφεύγω αυτό το μπέρδεμα? (ίσως και να τα έχω λίγο μπερδεμένα στο μυαλό μου :oops: )
Γιατί περνάς το movieclip σαν String, ενώ μπορείς να το χρησιμοποιήσεις κατευθείαν ?
Χμμμ θα το κοιτάξω, εδώ θα μπορούσα να χρησιμοποιήσω λίγη βοήθεια
Καλό θα ήταν να διαμορφώσεις την class να μπορεί να τοποθετεί τα mc όχι μόνο στο stage, αλλά σε οποιοδήποτε mc που περιέχεται μέσα σε ένα άλλο mc. Δηλαδή να μπορεί να χρησιμοποιεί σαν "stage" ένα άλλο mc.
Είναι μέσα στα σχέδια μου να το κάνω σύντομα όπως και κάτι αντίστοιχο και για το sizing. Πάντως το έφτιαξα για να κάνω positioning στο stage (συνήθως όταν κάνω τέτοιου είδους εργασία δεν κάνω positioning μέσα σε mc γιατί μετά πρέπει να βρίσκω και σχετικές θέσεις του κύριου mc με το μέσα οπότε μπερδεύεται λίγο το θέμα)

Ευχαριστώ για το feedback και τις προτάσεις, να'σαι καλά :D

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

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από HeRu » 24 Μαρ 2008 13:25

Garakatsamol έγραψε:Licenced το flash 8.
Υπάρχει το Flex 3 και το Flash Develop, τα οποία είναι δωρεάν, εάν είναι το licence το θέμα.
Garakatsamol έγραψε:εννοείς ότι θα έπρεπε να χρησιμοποιήσω var obj1, κτλ?
Εννοώ ότι δεν χρειάζεται να βάλεις τίποτα, όπως χρησιμοποιείς τα offset.
Garakatsamol έγραψε:Χμμμ θα το κοιτάξω, εδώ θα μπορούσα να χρησιμοποιήσω λίγη βοήθεια
Απλά το χρησιμοποιείς κατευθείαν

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

static function TL(obj, topOffset, leftOffset) {
		obj._x = leftOffset;
		obj._y = topOffset;
}
και όταν το χρειάζεσαι περνάς κατευθείαν το instance name

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

positioning.TL ( ball1, 0, 0 );
Garakatsamol έγραψε:Είναι μέσα στα σχέδια μου να το κάνω σύντομα
Εάν το επιχειρήσεις, θα πρέπει να κανείς κάτι τέτοιο:

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

static function MC(obj) {
		obj._x = ( obj._parent._width - _root[obj]._width ) / 2;
		obj._y = ( obj._parent._height - _root[obj]._height ) / 2;
}

Άβαταρ μέλους
Garakatsamol
Honorary Member
Δημοσιεύσεις: 919
Εγγραφή: 08 Μάιος 2007 00:27

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από Garakatsamol » 24 Μαρ 2008 13:34

Σωστός σε όλα :wink:
Ευχαριστώ πολύ φίλε μου :D

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από vassilism » 14 Οκτ 2008 00:56

Τώρα που το ξέθαψα αυτό το θέμα ούτε και εγώ κατάλαβα :D

Ρε παιδιά επειδή είμαι ψιλοάσχετος, δεν έχω καταλάβει πώς φαίνετε στην τελική.
Δηλαδή αν φτιάξω ένα flashmovie και το καλέσω στην HTML και του δώσω width=100%,height=100% ποια θα είναι η διαφορά?

Μήπως αυτή η class κρατάει τα αντικείμενα στην κανονική τους διάσταση και τα στοιχίζει εκεί που θέλουμε? :think:

Υπάρχει κάποιο παράδειγμα να δούμε?

Άβαταρ μέλους
Garakatsamol
Honorary Member
Δημοσιεύσεις: 919
Εγγραφή: 08 Μάιος 2007 00:27

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από Garakatsamol » 14 Οκτ 2008 04:17

Για παράδειγμα μπορείς να κάνεις download τα αρχεία που επισυνάπτω. Η συγκεκριμένη class είναι για Positioning και όχι για sizing
Μήπως αυτή η class κρατάει τα αντικείμενα στην κανονική τους διάσταση και τα στοιχίζει εκεί που θέλουμε?
Αυτό ακριβώς κάνει και αυτό απαντά και στην ερώτησή σου σχετικά με το 100%

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

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από HeRu » 14 Οκτ 2008 08:26

vassilism έγραψε:Υπάρχει κάποιο παράδειγμα να δούμε?
Ίσως να σε ενδιαφέρει και αυτό σε AS3 όμως
http://www.freestuff.gr/forums/viewtopi ... 817#370817

Garakatsamol ;)

Άβαταρ μέλους
Garakatsamol
Honorary Member
Δημοσιεύσεις: 919
Εγγραφή: 08 Μάιος 2007 00:27

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από Garakatsamol » 14 Οκτ 2008 16:45

HeRu έγραψε:
vassilism έγραψε:Υπάρχει κάποιο παράδειγμα να δούμε?
Ίσως να σε ενδιαφέρει και αυτό σε AS3 όμως
http://www.freestuff.gr/forums/viewtopi ... 817#370817

Garakatsamol ;)
Χαχαχα :D :D
Με πλήρωσες με το ίδιο νόμισμα :D :D

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από vassilism » 14 Οκτ 2008 17:50

Α μάλιστα, πολύ ωραία :D

Άβαταρ μέλους
dj_kostas_pro
Δημοσιεύσεις: 210
Εγγραφή: 10 Οκτ 2007 16:54
Τοποθεσία: Πιερία

[AS2] custom class για positioning αντικειμένων

Δημοσίευση από dj_kostas_pro » 27 Ιουν 2010 21:28

Ξέρω ότι το θέμα είναι παλιό αλλά έχω πρόβλημα κάνω αυτό μου έχετε στο παράδειγμα και είναι όλα οκ . Κάνω scale και τα movie clip αλλάζουν όμως όταν πάω να ανοίξω το swf αρχείο με ένα index.htm δεν γίνετε τίποτα μπορεί κάποιος να με βοηθήσει.

Απάντηση

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

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

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