freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.
 
Τώρα είναι 09 Φεβ 2010 17:22
All times are UTC + 2

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

 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Flash & ActionScript (Macromedia/Adobe) » ActionScript και Flex Προγραμματισμός
Moderators:  Super-Moderators, WebDev Moderators
Bookmarks Tags: actionscript
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [12 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
Αποστολέας Μήνυμα
HeRu
Flash Moderator

Μέλος από: 16 Αυγ 2004
Βοηθήματα: 6
Νέα: 4
Scripts: 3
Μηνύματα: 256+


View users profile Visit posters website
ΜήνυμαΣτις: 15 Φεβ 2008 11:40    Θέμα: [AS3] ActionScript 3 Βασικές έννοιες
Περιγραφή θέματος: τι είναι Object, namespace, package, function
Απάντηση με παράθεση  Mark this post and the followings unread

Μια πολύ γρήγορη σύνοψη τι είναι 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.

Αυτά τα λίγα, καλή τύχη, καλά διαβάσματα και καλός πειραματισμός



    ArkanoidClone_as2.swf
     Description:
    Arcanoid Clone Game
     Filesize:  4.6 KB
     Viewed:  3100 Time(s)





    ArcanoidClone.zip
     Description:
    Arcanoid Clone Game source files

    Download
     Filename:  ArcanoidClone.zip
     Filesize:  14.52 KB
     Downloaded:  309 Time(s)


    Last edited by HeRu on 17 Δεκ 2009 16:26, edited 5 times in total
    HeRu
    Flash Moderator

    Μέλος από: 16 Αυγ 2004
    Βοηθήματα: 6
    Νέα: 4
    Scripts: 3
    Μηνύματα: 256+


    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 11:57    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

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


    Μέλος από: 26 Φεβ 2007
    Μηνύματα: 17

    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 13:57    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

    Ευχαριστώ, τα εξηγείς πολύ κατανοητά.....
    Με το 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

    Μέλος από: 16 Αυγ 2004
    Βοηθήματα: 6
    Νέα: 4
    Scripts: 3
    Μηνύματα: 256+


    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 14:43    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

    Όταν βάζεις το ":" δηλώνεις τον τύπο του 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(var i:Number; i<len; i++) {
              finaltext+=keim+" "
         }
         return finaltext
    }


    Αυτή η function παίρνει δυο τιμές τύπου Number και String αντίστοιχα, μετά δημιουργεί μια μεταβλητή τύπου String, και με ένα for loop, όσο είναι η τιμή της μεταβλητής "len" αναπαράγει το κείμενο που έχει η μεταβλητή "keim" και στο τέλος επιστρέφει το τελικό String.

    Έτσι ένα υποθετικό σενάριο είναι:
    κώδικας:
    var text1:String = "test";
    var length1:Number = 5;
    vat text2:String;

    text2 = multitext( length1, text1 );
    trace(text2);


    Θα έβγαζε αποτέλεσμα: "test test test test test "

    Με την εντολή trace μπορείς να βλέπεις πληροφορίες μέσα στο flash στο output panel. Είναι χρήσιμο για να βρίσκεις πιθανά προβληματικά σημεία.

    Last edited by HeRu on 17 Δεκ 2009 16:25, edited 1 time in total
    georgew


    Μέλος από: 26 Φεβ 2007
    Μηνύματα: 17

    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 15:16    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

    Αυτό που δεν καταλαβαίνω είναι με το return η τιμή που επιστρέφει η function εκχωρείται σε κάποια μεταβλητή?
    κώδικας:
    var num1=25
    function epidyo( num1:Number ):Number {
       return num1 * num1;
    }
    trace (num1)
    trace (epidyo)

    Στο πιο πάνω μου επιστρέφει 25
    function Function() {}

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

    _________________
    -----www.greekteam.gr----

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

    Μέλος από: 16 Αυγ 2004
    Βοηθήματα: 6
    Νέα: 4
    Scripts: 3
    Μηνύματα: 256+


    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 16:18    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

    κώδικας:
    var num1=25
    function epidyo( num1:Number ):Number {
       return num1 * num1;
    }
    trace (num1)
    trace (epidyo())


    Αλλά ναι συνήθως εάν βάζεις σε μια function return, θέλεις να αποθηκεύσεις το αποτέλεσμα σε μια μεταβλητή για περαιτέρω επεξεργασία.
    georgew


    Μέλος από: 26 Φεβ 2007
    Μηνύματα: 17

    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 19:46    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

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

    _________________
    -----www.greekteam.gr----

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


    Μέλος από: 26 Φεβ 2007
    Μηνύματα: 17

    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 20:58    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

    Για παράδειγμα εσύ στο Arcanoid στο sprite.as γράφεις:
    κώδικας:
    public function getWidth():Number {
          return ref_mc._width;
       }
       public function getHeight():Number {
          return ref_mc._height;
       }
       public function getHalfWidth():Number {
          return ref_mc._width / 2;
       }
       public function getHalfHeight():Number {
          return ref_mc._height / 2;
       }
    ..............................


    Για ποιο λόγο γράφεις την εντολή return σε τι σε βοηθάει?

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

    _________________
    -----www.greekteam.gr----

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

    Μέλος από: 16 Αυγ 2004
    Βοηθήματα: 6
    Νέα: 4
    Scripts: 3
    Μηνύματα: 256+


    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 21:27    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

    Ας πούμε εδώ:
    κώδικας:
       public function getHalfHeight():Number {
          return ref_mc._height / 2;
       }

    Αυτή η function έχει σκοπό να επιστέφει το μισό ύψος ενός movieclip, οπότε στον κώδικα σου εάν είχες ένα movieclip μιας σφαίρας και θέλεις ένα άλλο movieclip να είναι ακριβώς στο μισό ύψος της σφαιρας, θα έγραφες κάτι τέτοιο:
    κώδικας:
    var midheight:Number = sphere.getHalfHeight();
    mc2._y = midheight



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


    Ναι, έχεις δίκιο, κανονικά θέλει και μια παράμετρο η function (duhh!)
    κώδικας:
    var num1=25
    function epidyo( num1:Number ):Number {
       return num1 * num1;
    }
    trace (num1)
    trace (epidyo(num1))
    georgew


    Μέλος από: 26 Φεβ 2007
    Μηνύματα: 17

    View users profile Visit posters website
    ΜήνυμαΣτις: 15 Φεβ 2008 22:25    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

    Παρ' όλα αυτά στον παρακάτω κώδικα μου βγάζει σφάλμα
    κώδικας:
     var my=25
    function line()
    {   
       if (my>0) {
          return line.x=100;
       }
    }


    Έχω φτιάξει μια γραμμή, της έχω δώσει name line, αλλά μου βγάζει σφάλματα ότι incompatible override και duplicate function definition. Που είναι το λάθος?

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

    _________________
    -----www.greekteam.gr----

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

    Μέλος από: 20 Δεκ 2002
    Βοηθήματα: 1
    Μηνύματα: 256+

    Περιοχή: κλειστή λόγω έργων
    View users profile Send email to user Visit posters website
    ΜήνυμαΣτις: 17 Φεβ 2008 13:04    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

    πςςςς που το θυμήθηκες αυτό το παιχνίδι! Το έπαιζα συνέχεια στον Amstrad 6128
    _________________
    http://www.datahost.gr
    georgew


    Μέλος από: 26 Φεβ 2007
    Μηνύματα: 17

    View users profile Visit posters website
    ΜήνυμαΣτις: 17 Φεβ 2008 13:15    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

    Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ...
    Εμφάνιση Μηνυμάτων:   
    Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [12 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
     Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Flash & ActionScript (Macromedia/Adobe) » ActionScript και Flex Προγραμματισμός



    Σχετικά θέματα
     Θέματα   Απ/σεις   Αποστολέας   Τελευταίο μήνυμα 
    [AS3] Transitions kai filters AS 3 1 gergos 03 Δεκ 2009 09:19
    HeRu Εμφάνιση τελευταίου μηνύματος
    [AS3] flash media server .call 2 christos_02009 26 Νοε 2009 17:50
    christos_02009 Εμφάνιση τελευταίου μηνύματος
    [AS2] link από δυναμικό text σε flash function 3 Garakatsamol 17 Σεπ 2009 20:12
    Garakatsamol Εμφάνιση τελευταίου μηνύματος
    map actionscript 2 wwf 15 Μαη 2008 14:10
    wwf Εμφάνιση τελευταίου μηνύματος
    [AS3] Actionscript 3:βοήθεια όρων 1 georgew 17 Φεβ 2008 12:08
    cordis Εμφάνιση τελευταίου μηνύματος
     

      διαφήμιση  

         Powered by p h p B B © 2001,2005 p h p B B Group
    Email This Page to Someone!  Facebook  twitter
    add to Favorites



    Copyright © 1999-2009 Freestuff.gr All Rights Reserved  

    Version Aegean, designed by N. Tsaganos