Ατομικές μεταβλητές (instance variables)
Οι ατομικές μεταβλητές επιτρέπουν σε κάθε τέρας να αποθηκεύει το υπόλοιπο της ζωής του. Μία μεταβλητή είναι απλά ένα ποσό το οποίο μπορούμε να μεταβάλουμε (ή το οποίο να ποικίλει) και λειτουργούν ανεξάρτητα για κάθε κόπια, εξού και το όνομα ατομική μεταβλητή (instance variable).
Ας προσθέσουμε μία ατομική μεταβλητή με όνομα health στο στοιχείο Monster. Επιλέξτε το στοιχείο Monster στο πάνελ του πρότζεκτ (project bar), ή στο πάνελ των στοιχείων (object bar). Εναλλακτικά, μπορείτε να επιλέξετε μία οποιαδήποτε κόπια του στοιχείου Monster από τη σκηνή. Κάθε ένα από παραπάνω θα μας δώσει πρόσβαση στις ιδιότητες του στοιχείου Monster, στο πάνελ ιδιοτήτων (properties bar). Κάντε κλικ στο Add/Edit στην κατηγορία Edit variables.
Θα εμφανιστεί το μενού των Ατομικών Μεταβλητών (instance variable dialog). Μοιάζει με το μενού των Συμπεριφορών που είδαμε νωρίτερα, αλλά αντί αυτού μας επιτρέπει να προσθέσουμε και να αλλάξουμε τις ατομικές μεταβλητές ενός στοιχείου. Κάντε κλικ πάνω στο πράσινο κουμπί Add για να προσθέσετε μία νέα ματεβλητή.
Στο μενού που θα εμφανιστεί, γράψτε health στο πεδίο name, αφήστε την παράμετρο Type σαν Number και στο πεδίο Initial value βάλτε 5 (όπως υποδεικνύεται). Τα παραπάνω ορίζουν τη ζωή του κάθε τέρατος στο ποσό 5. Όταν θα πυροβολούνται, θα αφαιρείται μία μονάδα από το υπόλοιπο τη ζωής τους και όταν αυτή φτάσει το μηδέν, το τέρας θα καταστραφεί.
Όταν είστε έτοιμοι, πατήστε ΟΚ. Παρατηρήστε ότι η καινούρια μεταβλητή εμφανίστηκε στο μενού των ατομικών μεταβλητών, καθώς και στο πάνελ με τις ιδιότητες του στοιχείου. (Μπορείτε να αλλάξετε το αρχικό ποσό της μεταβλητής γρήγορα από το πάνελ ιδιοτήτων, αλλά για προσθέσετε ή να αφαιρέσετε μία μεταβλητή πρέπει να κάνετε κλικ στο Add / Edit.)
Αλλάζοντας τις εντολές
Πηγαίνετε πάλι στο σύστημα εντολών (event sheet). Αυτή τη στιγμή καταστρέφουμε τα τέρατα μόλις μία σφαίρα τα ακουμπήσει. Ας αλλάξουμε την εντολή έτσι ώστε να αντί αυτού να αφαιρείται 1 από τη μεταβλητή health.
Βρείτε την εντολή που λέει:Bullet - on collision with Monster. Προσέξτε ότι την είχαμε κάνει να πραγματοποιεί τη δράση "destroy monster". Ας την κάνουμε "subtract 1 from health". Κάντε κλικ πάνω στη δράση "destroy monster" και επιλέξτε Replace (αντικατάσταση).
Εμφανίζεται το ίδιο μενού όπως όταν προσθέτουμε μία δράση, μόνο που αυτή τη φορά θα αντικαταστήσουμε τη δράση στην οποία κάναμε δεξί κλικ. Επιλέξτε Monster-> Subtract from (στην κατηγορία instance variables)-> Instance variable "health", και γράψτε 1 στο πεδίο Value*. Πατήστε Done. Η εντολή τώρα θα πρέπει να είναι ως εξής:
Τώρα, όταν πυροβολούμε τα τέρατα, αφαιρείται από αυτά 1 μονάδα από τη ζωή τους και η σφαίρα εκρήγνυται, αλλά δεν έχουμε φτιάξει μία εντολή που να ελέγχει τη ζωή των τεράτων έτσι ώστε όταν αυτή φτάσει το μηδέν, αυτά να εξαφανίζονται. Δημιουργήστε μία καινούρια εντολή:
Condition: Monster -> Compare instance variable -> Health, Less or equal, 0
Action: Monster -> Spawn another object -> Explosion, layer 1
Action: Monster -> Destroy
Γιατί όμως βάλαμε "less or equal 0" (μικρότερο ή ίσο με το μηδέν) αντί για "equals 0" (ίσο με το μηδέν); Ας υποθέσουμε ότι κάποια στιγμή ο παίχτης αποκτήσει ένα πιο ισχυρό όπλο το οποίο θα αφαιρεί 2 μονάδες από τη ζωή των τεράτων. Καθώς θα πυροβολείτε τα τέρατα, η μεταβλητή health θα πηγαίνει 5, 3, 1, -1, -3... προσέξτε ότι καμία στιγμή δεν γίνεται ίση με το μηδέν, οπότε το τέρας δε θα πεθάνει ποτέ! Επομένως, καλύτερα να χρησιμοποιήσουμε " μικρότερο ή ίσο με το μηδέν" για να ελέγξουμε το υπόλοιπο της ζωής.
Τρέξτε το παιχνίδι. Τώρα πρέπει να πυροβολήσετε πέντε φορές το κάθε τέρας για να το σκοτώσετε!
Κρατώντας σκορ
Ας βάλουμε βαθμολογία στο παιχνίδι, έτσι ώστε οι χρήστες να ξέρουνε πόσο καλά τα πήγαν κάθε φορά που παίζουν. Θα χρειαστούμε άλλη μία μεταβλητή για στο σκοπό αυτό. Ίσως να σκέφτεστε "ας βάλουμε μία ατομική μεταβλητή στο στοιχείο Player για να κρατάει το σκορ!". Αυτή δεν είναι κακή ιδέα, όμως θυμηθείτε ότι η ατομικές μεταβλητές αποθηκεύονται στο εκάστοτε στοιχείο ή / και τις κόπιες αυτών. Επομένως, αν ο παίχτης σκοτωθεί, το σκορ θα χαθεί διότι δε θα έχουμε πρόσβαση πια στη μεταβλητή του στοιχείου Player - θα έχει εξαφανιστεί από το παιχνίδι.
Αντ' αυτού, μπορούμε να χρησιμοποιήσουμε μία δημόσια μεταβλητή (global variable). Όπως και η ατομική μεταβλητή (instance variable), έτσι και η δημόσια μεταβλητή μπορεί να αποθηκεύσει το περιεχόμενο ενός κειμένου ή ενός αριθμού. Κάθε μία από τις μεταβλητές μπορεί να περιέχει μόνο έναν αριθμό ή ένα απόσπασμα κειμένου. Οι δημόσιες μεταβλητές είναι προσβάσιμες και διαθέσιμες σε ολόκληρο το παιχνίδι και σε όλες τις σκηνές - βολικό αν σκοπεύουμε να προσθέσουμε και άλλες πίστες.
Κάντε Δεξί κλικ σε κενό σημείο στο κάτω μέρος του συστήματος εντολών και επιλέξτε Add global variable.
Γράψτε Score στο πεδίο name. Αφήστε τα άλλα πεδία όπως είναι και πατήστε ΟΚ, η μεταβλητή θα έχει σαν αρχικό ποσό το 0.
Τώρα η δημόσια μεταβλητή βρίσκεται στο πάνω μέρος του συστήματος εντολών (event sheet) και φαίνεται σαν μία γραμμή από τη λίστα εντολών. Βρίσκεται σε αυτό το σύστημα (event sheet 1), αλλά θα είναι διαθέσιμη από οποιοδήποτε σύστημα εντολών στο πρότζεκτ μας. Δε χρειάζεται να μας απασχολεί τώρα όμως αυτό.
Ας δίνουμε στον παίχτη από έναν πόντο κάθε φορά που σκοτώνει ένα τέρας. Στην εντολή "Monster: health less or equal 0" (που ελέγχει και σκοτώνει το τέρας), κάντε κλικ στο Add action και επιλέξτε System -> Add to* (στην κατηγορία Global & local variables) ->Score, value 1. Τώρα, η εντολή πρέπει να είναι έτσι:
Τώρα ο παίχτης έχει σκορ το οποίο αυξάνεται κατά μία μονάδα κάθε φορά που σκοτώνει ένα τέρας - αλλά δεν μπορεί να δει το σκορ του! Ας του το δείξουμε με τη χρήση ενός στοιχείου text (κειμένου).