Μεταβλητές και είδη δεδομένων

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

H WME script είναι μία loosely typed γλώσσα προγραμματισμού. Αυτό σημαίνει ότι δεν είναι υποχρεωτικό να ορίσετε το είδος των δεδομένων μιας μεταβλητής στη δήλωσή της. Το είδος δεδομένων της μεταβλητής εξαρτάται από την τιμή που θα αποθηκεύσετε σε αυτή.

Εσωτερικά η WME script χρησιμοποιεί τα ακόλουθα είδη δεδομένων:

Boolean

Οι μεταβλητές boolean μπορούν να περιλαμβάνουν μία λογική τιμή: αληθές (true) ή ψευδές (false).

String

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

Integer

Οι τιμές integer είναι ακέραιοι θετικοί αριθμοί ή μηδέν.

Floating-point

Οι τιμές floating-point είναι πραγματικοί αριθμοί με κινητή υποδιαστολή. 

Null

H τιμή null μπορεί να έχει μόνο μία τιμή στα WME script: null. Μια μεταβλητή που περιέχει αυτή την τιμή, ουσιαστικά δεν περιέχει "καμία τιμή" και "κανένα αντικείμενο". Μπορείτε να σβήσετε τα περιεχόμενα μιας μεταβλητής ορίζοντας της την τιμή null.


Τα WME scripts χρησιμοποιούν τρία είδη μεταβλητών: τοπικές, γενικές και διαρκής.

Τοπικές μεταβλητές

Οι τοπικές μεταβλητές ορίζονται με την λέξη var και είναι αναγνωρίσιμες μόνο μέσα στο τμήμα του κώδικα όπου ορίζονται.

Παραδείγματα:

var MyVariable;
var MyInitializedVariable = 10;

Γενικές μεταβλητές

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

Παραδείγματα:

global MyGlobal;
global MyInitializedGlobal = 10;

Διαρκείς μεταβλητές

Οι διαρκείς μεταβλητές ορίζονται με την λέξη const και είναι αναγνωρίσιμες και λειτουργικές σε όλα τα scripts. Η συμπεριφορά τους είναι ακριβώς η ίδια με τις γενικές μεταβλητές με μία διαφορά: η τιμή τους δεν σβήνει με την μέθοδο Game.Reset(). Για αυτό το λόγο είναι χρήσιμες για προκαθορισμένες μεταβλητές που σπάνια αλλάζουν την τιμή τους.

Παράδειγμα:

const DI_UP = 0;

 

Προκαθορισμένες μεταβλητές: Game και this

Υπάρχουν δύο ειδικές μεταβλητές, οι Game και this που είναι μόνιμα δηλωμένες και διαθέσιμες στα scripts σας.

Η μεταβλητή Game περιέχει αναφορά στο βασικό αντικείμενο, το παιχνίδι. Μπορείτε να καλείτε τις μεθόδους του και να εξετάζετε τις ιδιότητες του.

Η μεταβλητή this περιέχει αναφορά στο αντικείμενο που ανήκει το script που εκτελείτε αυτή τη στιγμή (τα scripts στην WME είναι πάντα ορισμένα σε ένα αντικείμενο).


Οι μεταβλητές είναι αντικείμενα

Όλες οι μεταβλητές είναι στην πραγματικότητα αντικείμενα. Αυτο σημαίνει ότι μπορείτε να τους ορίσετε μία απλή τιμή ή ακόμα πολλές τιμές σε διάφορες παραμέτρους που εσείς δημιουργείτε και δίνετε ονόματα. Όλα τα επόμενα παραδείγματα είναι έγκυρα στα WME scripts:

var MyVariable;
MyVariable.SomeProperty = 10;
MyVariable.AnotherProperty = "a string value";
MyVariable.LogProperty = true;
MyVariable[0] = 20;
MyVariable[1] = 30;
MyVariable["YetAnotherProperty"] = 40;

Δώστε προσοχή στη γραμμή MyVariable[0]. Με αυτό τον τρόπο μπορείτε εύκολα να χρησιμοποιήσετε πίνακες (γνωστές από άλλες γλώσσες) χωρίς να τους ορίσετε.

Θυμηθείτε ότι αντί να χρησιμοποιείτε δεκάδες γενικές μεταβλητές είναι καλύτερο να εκμεταλλευτείτε την παραπάνω δυνατότητα και να εντάξετε τις συναφείς μεταβλητές σε μία "μεταβλητή αντικείμενο". Για παράδειγμα, πιθανόν θα καταλήξετε να έχετε πολλές μεταβλητές που περιγράφουν την κατάσταση κάθε σκηνής του παιχνιδιού σας. Τέτοιες μεταβλητές "κατάστασης σκηνών" όπως "είναι το παράθυρο ανοικτό στην σκηνή ΧΧΧ;", "έχει επισκεφθεί ο παίκτης τη σκηνή YYY ή όχι ακόμα;" είναι προτιμότερο να ορίζονται σε μία γενική μεταβλητή ανά σκηνή που θα περιλαμβάνει όλες τις απαραίτητες πληροφορίες.

Παράδειγμα:

global StateMyScene;
StateMyScene.VisitedByPlayer = false;
StateMyScene.IsWindowOpen = true;

Κάτι τέτοιο παρουσιάζεται και στο παιχνίδι επίδειξης και υποστηρίζεται επίσης από τα προϋπάρχοντα πρότυπα που είναι τμήμα του πακέτου δημιουργίας της WME.

 

Αντικείμενα του παιχνιδιού

Εκτός από τις συνηθισμένες μεταβλητές συχνά θα χρειαστείτε και ειδικές που περιλαμβάνουν αναφορά σε αντικείμενα του παιχνιδιού (όπως σκηνές, χαρακτήρες, παράθυρα κ.λπ.). Η αλλαγή των παραμέτρων αυτών των μεταβλητών θα έχει άμεση επίδραση στη συμπεριφορά του παιχνιδιού. Για παράδειγμα αν ορίσετε την παράμετρο "X" μιας μεταβλητής που αναφέρεται σε κάποιο χαρακτήρα τότε αυτός θα μετακινηθεί σε ανάλογη θέση στη σκηνή. Αυτές οι ειδικές μεταβλητές επιτρέπουν και την χρήση μεθόδων.  Για παράδειγμα, αν καλέσετε τη μέθοδο "Talk" τότε ο χαρακτήρας θα μιλήσει.

Παράδειγμα:

var actor = Game.LoadActor("actors\molly\molly.actor");
actor.SetPosition(100, 200);
actor.Talk("Μπλα Μπλα");
actor.Active = false;

Το παραπάνω παράδειγμα κάνει τα ακόλουθα:

1)  δηλώνει την τοπική μεταβλητή "actor"
2)  καλεί την μέθοδο "LoadActor" στο αντικείμενο παιχνίδι και αποθηκεύει το αποτέλεσμα στην μεταβλητή "actor"
3)  καλεί την μέθοδο "SetPosition" στον καινούριο χαρακτήρα που μετακινείται στην αντίστοιχη θέση στην οθόνη
4)  καλεί την μέθοδο "Talk" για να πει ο χαρακτήρας "Μπλα Μπλα"
5)  ορίζει την ιδιότητα "Active" του χαρακτήρα σε ψευδές για να τον κρύψει

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