Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.
Τώρα είναι 09 Φεβ 2010 17:22
All times are UTC + 2 |
Moderators:
Super-Moderators, WebDev Moderators
| Αποστολέας |
Μήνυμα |
HeRu
Flash Moderator  Μέλος από: 16 Αυγ 2004 Βοηθήματα: 6 Νέα: 4 Scripts: 3 Μηνύματα: 256+
|
Στις: 15 Φεβ 2008 11:40 Θέμα:
[AS3] ActionScript 3 Βασικές έννοιες Περιγραφή θέματος: τι είναι Object, namespace, package, function |
|
|
Μια πολύ γρήγορη σύνοψη τι είναι 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.
Αυτά τα λίγα, καλή τύχη, καλά διαβάσματα και καλός πειραματισμός
| 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+
|
Στις: 15 Φεβ 2008 11:57 Θέμα:
|
|
|
Ουπς ξέχασα το Packages
το συμπλήρωσα τώρα
|
|
 |
 |
georgew
Μέλος από: 26 Φεβ 2007 Μηνύματα: 17
|
Στις: 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  Μέλος από: 16 Αυγ 2004 Βοηθήματα: 6 Νέα: 4 Scripts: 3 Μηνύματα: 256+
|
Στις: 15 Φεβ 2008 14:43 Θέμα:
|
|
|
Όταν βάζεις το ":" δηλώνεις τον τύπο του data που χειρίζεσαι. Σε βοηθάει να μην κάνεις λάθη στις αναθέσεις και στην επεξεργασία data.
π.χ. εάν γράψεις τον κώδικα
| κώδικας: | | var arithmos:Number; |
τότε δηλώνεις ότι το "arithmos" δέχεται μόνο αριθμούς, οπότε εάν ποιο μετά γράψεις καταλάθως
θα σου χτυπήσει 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
|
Στις: 15 Φεβ 2008 15:16 Θέμα:
|
|
|
Αυτό που δεν καταλαβαίνω είναι με το 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+
|
Στις: 15 Φεβ 2008 16:18 Θέμα:
|
|
|
Για να καλέσεις μια function πρέπει να βάλεις τις παρενθέσεις, ακόμα και εάν δεν βάζεις κάποια παράμετρο.
| κώδικας: | var num1=25
function epidyo( num1:Number ):Number {
return num1 * num1;
}
trace (num1)
trace (epidyo()) |
Αλλά ναι συνήθως εάν βάζεις σε μια function return, θέλεις να αποθηκεύσεις το αποτέλεσμα σε μια μεταβλητή για περαιτέρω επεξεργασία.
|
|
 |
 |
georgew
Μέλος από: 26 Φεβ 2007 Μηνύματα: 17
|
Στις: 15 Φεβ 2008 19:46 Θέμα:
|
|
|
Δηλαδή αυτό που βγάζει η return δεν εκχωρείται σε κάποια μεταβλητή.... Άρα δεν μπορείς να το χρησιμοποιήσεις, άρα για ποιο λόγο να τη χρησιμοποιήσεις αφού το αποτέλεσμα που βγάζει δεν μπορεί να εκχωρηθεί σε κάποια μεταβλητή? Αυτό που βγάζει πως το χρησιμοποιείς?
Ακόμα αν γράψω τον κώδικα του προηγούμενου στο post μου βγάζει σφάλμα στη γραμμή trace (epidyo ())....
_________________ -----www.greekteam.gr----
Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ... |
|
 |
 |
georgew
Μέλος από: 26 Φεβ 2007 Μηνύματα: 17
|
Στις: 15 Φεβ 2008 20:58 Θέμα:
|
|
|
Για παράδειγμα εσύ στο 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+
|
Στις: 15 Φεβ 2008 21:27 Θέμα:
|
|
|
Οι εντολές που είναι μέσα σε μια 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
|
Στις: 15 Φεβ 2008 22:25 Θέμα:
|
|
|
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+Περιοχή: κλειστή λόγω έργων
|
Στις: 17 Φεβ 2008 13:04 Θέμα:
|
|
|
πςςςς που το θυμήθηκες αυτό το παιχνίδι! Το έπαιζα συνέχεια στον Amstrad 6128
_________________ http://www.datahost.gr |
|
 |
 |
georgew
Μέλος από: 26 Φεβ 2007 Μηνύματα: 17
|
Στις: 17 Φεβ 2008 13:15 Θέμα:
|
|
|
Και εμένα μου αρέσει πολύ και το έπαιζα το Arcanoid....
_________________ -----www.greekteam.gr----
Αν δεν πάρω και φέτος πρωτάθλημα θα τρελαθώ... |
|
 |
 |
|
Powered by p h p B B © 2001,2005 p h p B B Group
|