[AS3] ActionScript 3 Βασικές έννοιες

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

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

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

[AS3] ActionScript 3 Βασικές έννοιες

Δημοσίευση από HeRu » 15 Φεβ 2008 11:40

Μια πολύ γρήγορη σύνοψη τι είναι Object, namespace, package, function.

Για ποιο πολλές λεπτομέρειες θα πρότεινα να ξεκινήσεις από το help του Flash CS3 ή του Flex Builder. Επίσης ένα πολύ καλό βιβλίο είναι το Essential ActionScript 3.

Classes/Objects - Τα objects και τα classes είναι το ίδιο πράγμα βασικά, το object είναι η θεμέλιος λίθος του flash, το οποίο είναι ένα άδειο αντικείμενο που μπορείς να το διαπλάσεις όπως θέλεις, όλα τα αντικείμενα μέσα στο flash είναι objects( movieclips, bitmaps, sounds, code etc ).

Οι classes είναι ένα βοήθημα για να μπορείς να δημιουργείς δικά σου αντικείμενα πιο εύκολα και λογικά. Δηλαδή φτιάχνεις ένα custom αντικείμενο που περιέχει τις δικές σου εντολές και μεταβλητές.

Για παράδειγμα θέλεις να φτιάξεις ένα αντικείμενο που αντιπροσωπεύει έναν ηρώα σε ένα game. θα μπορούσες να κάνεις μια class κάπως έτσι(με πολύ χαλαρό κώδικα):

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

class hero{
     function walk(){}
     function shoot(){}
     function die(){}
}
Οπότε μετά μέσα στο κυρίως πρόγραμμα σου, φτιάχνεις ένα αντικείμενο τύπου hero το οποίο μπορείς να χρησιμοποιείς όπως χρησιμοποιείς ένα movieclip. π.χ.

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

var myHero = new hero()
myHero.shoot()
Τώρα τις classes τις διακατέχει μια ολόκληρη επιστήμη που λέγετε αντικειμενοστραφής προγραμματισμός (object oriented programming), που σε βοηθάει να αποφασίσεις πως θα δομήσεις τις classes σου, τι θα περιεχέι η κάθε μια, πως θα αλληλεπιδράσουν μεταξύ τους κλπ.

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

namespaces - Τα namespaces χρησιμοποιούνται για να groupαρουν τις classes κάτω από ένα όνομα. Η κύρια χρησιμότητα τους είναι να μην υπάρξει σύγχυση μεταξύ δυο classes που έχουν το ίδιο όνομα.

π.χ. θα μπορούσε να φτιάξεις μια class με όνομα main, και να χρησιμοποιείς κάποιο έτοιμο library που να έχει επίσης μια class με όνομα main, οπότε εάν εσύ βάλεις την class σου ότι ανήκει στο namespace myclasses, τότε μπορείς να είσαι σίγουρος ότι χρησιμοποιείς την δικιά σου class κάπως έτσι:

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

var mymain = new myclasses::main()
packages - Τα packages είναι παρόμοια με τα namespaces, χρησιμοποιούνται δηλαδή για να groupαρουν τις classes σου, και για να είναι πιο εύκολο για εσένα να διαχειρίζεσαι πολλές classes. Αλλά πάει πιο πολύ προς την φυσική τους οργανώσει, δηλαδή τα αρχεία αυτά καθαυτά.

π.χ. Λες ότι μια class με μαθηματικές λειτουργίες ανήκει στο πακέτο myclasses.math

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

package myclasses.math{
class myclass{}
}
Τα αρχεία των classes πρέπει να ακολουθούν την δομή φακέλων που ορίζεις στο package, δηλαδή εάν είχες το προηγούμενο class πρέπει να είναι μέσα σε έναν φάκελο "myclasses" που περιέχει έναν φάκελο "math" που περιέχει ένα αρχείο myclass.as.

Εάν είχες ένα αρχείο fla και ένα class στο ίδιο επίπεδο αφήνεις το package κενό. π.χ.

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

package {
class myclass{}
}
functions - Οι functions δεν είναι τίποτα άλλο παρά ένα groupαρισμα εντολών που θα τις χρησιμοποιήσεις πάνω από μια φορές.

π.χ. Εάν θέλεις να υπολογίσεις την απόσταση μεταξύ δυο sprites σε κάθε frame, παίρνεις τις εντολές που το υλοποιούν αυτό και τις βάζεις σε μια function, και όποτε χρειάζεσαι να υπολογίσεις την απόσταση, καλείς την function.

Οι functions έχουν επίσης δυο σημαντικές λειτουργίες
  • Μπορούν να δέχονται παραμέτρους όπως π.χ. gotoAndPlay(10), όπου το "10" είναι μια παράμετρος ή στο προηγούμενο παράδειγμα τα δυο sprites που θέλεις να ελέγξεις την απόσταση.
  • Και μπορούν να επιστρέφουν κάποια τιμή π.χ. var a = Math.random() ή στο προηγούμενο παράδειγμα την απόσταση μεταξύ των δυο sprites.

Σου κάνω attach ένα απλό game που έφτιαξα όταν έκανα τα πρώτα μου βήματά στις classes, είναι για AS 2.0 αλλά με λίγες μετατροπές μπορείς το κάνεις να παίζει σε AS 3.0.

Αυτά τα λίγα, καλή τύχη, καλά διαβάσματα και καλός πειραματισμός ;)
    Συνημμένα
    ArcanoidClone.zip
    Arcanoid Clone Game source files
    (14.52 KiB) Μεταφορτώθηκε 1016 φορές

    ArkanoidClone_as2.swf [ 4.6 KiB | Προβλήθηκε 8427 φορές ]

    Τελευταία επεξεργασία από το μέλος HeRu την 17 Δεκ 2009 16:26, έχει επεξεργασθεί 5 φορές συνολικά.

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

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από HeRu » 15 Φεβ 2008 11:57

    Ουπς ξέχασα το Packages :P

    το συμπλήρωσα τώρα :)

    georgew
    Δημοσιεύσεις: 18
    Εγγραφή: 26 Φεβ 2007 19:12
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από georgew » 15 Φεβ 2008 13:57

    Ευχαριστώ, τα εξηγείς πολύ κατανοητά.....
    Με το flash cs3 προσπαθώ και χρησιμοποιώ το programming_actionscript 3 από το site της Adobe.... Το θέμα είναι ότι έχω ένα προβληματάκι με τα αγγλικά μου.......

    Θα ήθελα να σε ρωτήσω ακόμα τι κάνει η λέξη avoid (π.χ. public function Collision(sprt):Void) και η εντολή return τι ακριβώς κάνει? Καταχωρεί σε μια νέα μεταβλητή ένα δεδομένο (π.χ.
    public function get speed():Number {
    return loc_speed;) ?

    Ευχαριστώ.......
    -----www.greekteam.gr----

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...

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

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από HeRu » 15 Φεβ 2008 14:43

    Όταν βάζεις το ":" δηλώνεις τον τύπο του data που χειρίζεσαι. Σε βοηθάει να μην κάνεις λάθη στις αναθέσεις και στην επεξεργασία data.

    π.χ. εάν γράψεις τον κώδικα

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

    var arithmos:Number;
    τότε δηλώνεις ότι το "arithmos" δέχεται μόνο αριθμούς, οπότε εάν ποιο μετά γράψεις καταλάθως

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

    arithmos="abc"
    θα σου χτυπήσει error στο compile.

    Το void σημαίνει κενό/τίποτα, και μπαίνει στο τέλος της function για να υποδηλώσει ότι αυτή η function δεν επιστρέφει κάποια τιμή. Δηλαδή δεν έχει κάπου μέσα στην function την εντολή return με κάποια τιμή.

    Το return κάνει την function να επιστέψει κάποια τιμή ή να διακόψει το τρέξιμο της function.
    πχ.

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

    function epidyo( num1:Number ):Number {
         return num1*num1
    }
    Εδώ το "num1:Number" σημαίνει ότι αυτή η function παίρνει μια παράμετρο που πρέπει να είναι Number, και το ":Number" μετά την παρένθεση σημαίνει ότι αυτή η function επιστρέφει μια τιμή που είναι επίσης Number.

    π.χ. 2

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

    function multitext( len:Number, keim:String ):String{
         var finaltext:String;
         for&#40;var i&#58;Number; i<len; i++&#41; &#123;
              finaltext+=keim+" "
         &#125;
         return finaltext
    &#125;
    Αυτή η function παίρνει δυο τιμές τύπου Number και String αντίστοιχα, μετά δημιουργεί μια μεταβλητή τύπου String, και με ένα for loop, όσο είναι η τιμή της μεταβλητής "len" αναπαράγει το κείμενο που έχει η μεταβλητή "keim" και στο τέλος επιστρέφει το τελικό String.

    Έτσι ένα υποθετικό σενάριο είναι:

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

    var text1&#58;String = "test";
    var length1&#58;Number = 5;
    vat text2&#58;String;
    
    text2 = multitext&#40; length1, text1 &#41;;
    trace&#40;text2&#41;;
    Θα έβγαζε αποτέλεσμα: "test test test test test "

    Με την εντολή trace μπορείς να βλέπεις πληροφορίες μέσα στο flash στο output panel. Είναι χρήσιμο για να βρίσκεις πιθανά προβληματικά σημεία.
    Τελευταία επεξεργασία από το μέλος HeRu την 17 Δεκ 2009 16:25, έχει επεξεργασθεί 1 φορά συνολικά.

    georgew
    Δημοσιεύσεις: 18
    Εγγραφή: 26 Φεβ 2007 19:12
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από georgew » 15 Φεβ 2008 15:16

    Αυτό που δεν καταλαβαίνω είναι με το return η τιμή που επιστρέφει η function εκχωρείται σε κάποια μεταβλητή?

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

    var num1=25
    function epidyo&#40; num1&#58;Number &#41;&#58;Number &#123;
    	return num1 * num1;
    &#125;
    trace &#40;num1&#41;
    trace &#40;epidyo&#41;
    Στο πιο πάνω μου επιστρέφει 25
    function Function() {}

    Δηλαδή, γράφωντας return στο τέλος της function η τιμή που επιστρέφει πως εκχωρείται??/
    -----www.greekteam.gr----

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...

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

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από HeRu » 15 Φεβ 2008 16:18

    Για να καλέσεις μια function πρέπει να βάλεις τις παρενθέσεις, ακόμα και εάν δεν βάζεις κάποια παράμετρο.

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

    var num1=25
    function epidyo&#40; num1&#58;Number &#41;&#58;Number &#123;
       return num1 * num1;
    &#125;
    trace &#40;num1&#41;
    trace &#40;epidyo&#40;&#41;&#41;
    Αλλά ναι συνήθως εάν βάζεις σε μια function return, θέλεις να αποθηκεύσεις το αποτέλεσμα σε μια μεταβλητή για περαιτέρω επεξεργασία.

    georgew
    Δημοσιεύσεις: 18
    Εγγραφή: 26 Φεβ 2007 19:12
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από georgew » 15 Φεβ 2008 19:46

    Δηλαδή αυτό που βγάζει η return δεν εκχωρείται σε κάποια μεταβλητή.... Άρα δεν μπορείς να το χρησιμοποιήσεις, άρα για ποιο λόγο να τη χρησιμοποιήσεις αφού το αποτέλεσμα που βγάζει δεν μπορεί να εκχωρηθεί σε κάποια μεταβλητή? Αυτό που βγάζει πως το χρησιμοποιείς?

    Ακόμα αν γράψω τον κώδικα του προηγούμενου στο post μου βγάζει σφάλμα στη γραμμή trace (epidyo ())....
    -----www.greekteam.gr----

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...

    georgew
    Δημοσιεύσεις: 18
    Εγγραφή: 26 Φεβ 2007 19:12
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από georgew » 15 Φεβ 2008 20:58

    Για παράδειγμα εσύ στο Arcanoid στο sprite.as γράφεις:

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

    public function getWidth&#40;&#41;&#58;Number &#123;
    		return ref_mc._width;
    	&#125;
    	public function getHeight&#40;&#41;&#58;Number &#123;
    		return ref_mc._height;
    	&#125;
    	public function getHalfWidth&#40;&#41;&#58;Number &#123;
    		return ref_mc._width / 2;
    	&#125;
    	public function getHalfHeight&#40;&#41;&#58;Number &#123;
    		return ref_mc._height / 2;
    	&#125;
    ..............................
    Για ποιο λόγο γράφεις την εντολή return σε τι σε βοηθάει?

    Δηλαδή αυτό που υπολογίζει η εντολή return πως μπορείς να το χρησιμοποιήσεις ή σε τι επηρεάζει? Για ποιο λόγο υπάρχει? Μόνο για το τέλος της function?
    Αφού δεν εκχωρείται σε κάποια μεταβλητή ώστε να το χρησιμοποιείς???
    Καταλαβαίνεις τι εννοώ???
    -----www.greekteam.gr----

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...

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

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από HeRu » 15 Φεβ 2008 21:27

    Οι εντολές που είναι μέσα σε μια function εκτελούνται μόνο όταν την καλέσεις. Το return χρειάζεται μόνο όταν θέλεις μια function να επιστέφει κάποιο αποτέλεσμα όταν την καλείς ή πιο σπάνια εάν θέλεις να διακοψεις την εκτέλεση της function.

    Ας πούμε εδώ:

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

       public function getHalfHeight&#40;&#41;&#58;Number &#123;
          return ref_mc._height / 2;
       &#125; 
    Αυτή η function έχει σκοπό να επιστέφει το μισό ύψος ενός movieclip, οπότε στον κώδικα σου εάν είχες ένα movieclip μιας σφαίρας και θέλεις ένα άλλο movieclip να είναι ακριβώς στο μισό ύψος της σφαιρας, θα έγραφες κάτι τέτοιο:

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

    var midheight&#58;Number = sphere.getHalfHeight&#40;&#41;;
    mc2._y = midheight
    Ακόμα αν γράψω τον κώδικα του προηγούμενου στο post μου βγάζει σφάλμα στη γραμμή trace (epidyo ())....
    Ναι, έχεις δίκιο, κανονικά θέλει και μια παράμετρο η function (duhh!:P)

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

    var num1=25
    function epidyo&#40; num1&#58;Number &#41;&#58;Number &#123;
       return num1 * num1;
    &#125;
    trace &#40;num1&#41;
    trace &#40;epidyo&#40;num1&#41;&#41;

    georgew
    Δημοσιεύσεις: 18
    Εγγραφή: 26 Φεβ 2007 19:12
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από georgew » 15 Φεβ 2008 22:25

    OK! :D Τώρα το κατάλαβα απόλυτα. Thanks :D :lol: :P

    Παρ' όλα αυτά στον παρακάτω κώδικα μου βγάζει σφάλμα

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

     var my=25 
    function line&#40;&#41; 
    &#123;	
    	if &#40;my>0&#41; &#123;
    		return line.x=100;
    	&#125;
    &#125;
    Έχω φτιάξει μια γραμμή, της έχω δώσει name line, αλλά μου βγάζει σφάλματα ότι incompatible override και duplicate function definition. Που είναι το λάθος?

    Υ.Γ. Συγνώμη αν σε κουράζω.......
    -----www.greekteam.gr----

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...

    Άβαταρ μέλους
    iNDEFiX
    Honorary Member
    Δημοσιεύσεις: 2569
    Εγγραφή: 20 Δεκ 2002 00:48
    Τοποθεσία: κλειστή λόγω έργων
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από iNDEFiX » 17 Φεβ 2008 13:04

    πςςςς που το θυμήθηκες αυτό το παιχνίδι! Το έπαιζα συνέχεια στον Amstrad 6128

    georgew
    Δημοσιεύσεις: 18
    Εγγραφή: 26 Φεβ 2007 19:12
    Επικοινωνία:

    [AS3] ActionScript 3 Βασικές έννοιες

    Δημοσίευση από georgew » 17 Φεβ 2008 13:15

    Και εμένα μου αρέσει πολύ και το έπαιζα το Arcanoid....
    -----www.greekteam.gr----

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...

    Απάντηση

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

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

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