7.1 Εισαγωγικό μέρος με επεξήγηση των Εντολών : Επεξήγηση των εντολών που θα ΕΝΤΟΛΕΣ χρησιμοποιηθούν παρακάτω στα παραδείγματα Βάζοντας την εντολή αυτή σε οποιοδήποτε αντικείμενο μπορούμε να αλλάζουμε όψεις ( δηλαδή ενδυμασία ). Η εντολή αυτή κάνει ο,τι και η παραπάνω με τη διαφορά ότι δεν επιλέγουμε άμεσα την όψη που θέλουμε, αλλά έμμεσα ανάλογα με ποια σειρά τις έχουμε επιλέξει από την επιλογή ενδυμασίες του κάθε αντικειμένου μας. Δεν είναι ακριβώς εντολή, αλλά μια επιλογή, όπου αν την επιλέξουμε μας εμφανίζει στο παράθυρό μας ποια ενδυμασία χρησιμοποιεί το αντικείμενό μας. Με την εντολή αυτή διαλέγουμε το αντικείμενό μας να είναι μπροστά από οποιονδήποτε αντικείμενο του προγράμματος μας ( αρκεί βέβαια να μην έχουμε κάνει χρήση της εντολής αυτή και για άλλο αντικείμενο ). Με αυτή την εντολή μπορούμε να διαλέξουμε σε ποιο επίπεδο επιθυμούμε να βρίσκεται το κάθε αντικείμενο. 7.1 Αλλάζοντας όψεις εύκολα, γρήγορα και προσεκτικά... Όπως και στα κόμικς, έτσι και οι χαρακτήρες που θα δημιουργήσουμε εμείς θα πρέπει μας να έχουν διαφορετικές όψεις (δηλαδή διαφορετική ενδυμασία), ανάλογα με την περίσταση. Φανταστείτε τι θα γινότανε αν ο Σούπερμαν φορούσε μόνο τη στολή του! Δε θα ήταν πλέον άγνωστη η ταυτότητά του. Αυτά μπορούν να πραγματοποιηθούν με την χρήση των παρακάτω εντολών. Με τη βοήθεια των εντολών <αλλαγή σε ενδυμασία ενδυμασία1 > και <επόμενη ενδυμασία> μπορούμε να αλλάξουμε την όψη (ενδυμασία) του χαρακτήρα μας. Μπορούμε να σκεφτούμε παραδείγματα όπου θα χρησιμοποιούσαμε κάτι τέτοιο? Εκτός από τον Μπάτμαν και το Σούπερμαν τι άλλο περιστατικό θα μπορούσαμε να επιτύχουμε με τη χρήση των παραπάνω εντολών? Ένα απλό παράδειγμα είναι όταν θέλουμε να απεικονίσουμε έναν ήρωα μας να περπατάει ή όταν θέλουμε ο χαρακτήρας μας να κάνει τραμπολίνο και να κάνει διαφορετικές φιγούρες ή απλά να τον κάνουμε να χορεύει! Παράδειγμα 1 Ξεκινάμε να περπατάμε!!! Το παράδειγμα που θα μπορούσαμε να επικεντρωθούμε περισσότερο προκειμένου να έχει πιο πολύ ενδιαφέρον για όλους μας είναι πως θα καταφέρουμε να δημιουργήσουμε ένα αντικείμενο να κινηθεί. Βέβαια η κίνηση που έχουμε μάθει σε προηγούμενα κεφάλαια ( στο κεφάλαιο 5 ) δεν κάνει τίποτε παραπάνω από το να αλλάζει θέση το αντικείμενό μας στο γραφικό μας περιβάλλον. Ας δούμε πώς μπορεί ένα κινούμενο σχέδιο να κινηθεί. Τα κινούμενα σχέδια είναι μια σειρά από
εικόνες οι οποίες αλλάζουν πολύ γρήγορα για να δημιουργηθεί η ψευδαίσθηση σε αυτόν που το παρακολουθεί ότι υπάρχει κίνηση. Αν ακολουθήσουμε κι εμείς την ίδια τακτική με αυτή που είπαμε, τότε απλά θα έπρεπε να δημιουργήσουμε διαφορετικές όψεις ( του αντικειμένου που θέλουμε να κάνουμε να περπατήσει ) που με τον κατάλληλο χρονισμό και την σωστή εναλλαγή να φανεί σαν να περπατάει στην πραγματικότητα. Για καλή μας τύχη στο πρόγραμμα μας υπάρχουν αυτές οι όψεις που χρειαζόμαστε για ένα συγκεκριμένο αντικείμενο. Έτσι το αντικείμενο που θα χρησιμοποιήσουμε είναι αυτό της εικόνας 7.1.1 το οποίο το ονομάζουμε Βήμα_1. Εν συνεχεία θα διαλέξουμε τις διαφορετικές όψεις που θα μας βοηθήσουν προκειμένου να επιτύχουμε τον τελικό μας στόχο. Αυτές οι όψεις θα επιλεχθούν ως ενδυμασίες για το αντικείμενό μας και θα είναι αυτές που βλέπουμε στην Εικόνα 7.1.2. Έχουμε κάνει μια πολύ καλή αρχή, αλλά πρέπει να ξανασκεφτούμε αυτά που έχουμε πει στην αρχή. Θέλουμε δηλαδή να κάνουμε σωστό χρονισμό μεταξύ τον εναλλαγών των ενδυμασιών μας καθώς και να κάνουμε πετυχημένη εναλλαγή για να φαίνεται σωστή η κίνηση του αντικειμένου μας. Ξεκινάμε τη συγγραφή του κώδικά μας για το αντικείμενο. Αρχικά ορίζουμε την αρχική θέση που θέλουμε να ξεκινάει να περπατάει το αντικείμενό μας. Έστω πως θα θα ξεκινάει από τη θέση x=-180 και y=0. Στη συνέχεια επιλέγουμε να επαναλαμβάνονται οι εντολές της κίνησης με τη χρήση της <Για πάντα> όπου τη σημασία της θα την ορίσουμε σε παρακάτω κεφάλαιο. Τώρα θα προσπαθήσουμε να εφαρμόσουμε, με τη χρήση κατάλληλων εντολών, όσα λέγαμε παραπάνω. Έτσι ξεκινάμε πρώτα με την εντολή <αλλαγή σε ενδυμασία Βήμα_1 >, κινούμαστε ομαλά για 10 στον άξονα των x με τη βοήθεια της εντολής <άλλαξε χ κατά 10 > και περιμένουμε για 0,25 δευτερόλεπτα όπου έτσι επιτυγχάνουμε να έχουμε σωστή συχνότητα εναλλαγής των ενδυμασιών. Συνεχίζουμε με παρόμοιο τρόπο και για τις υπόλοιπες αλλαγές ενδυμασιών και έτσι καταφέραμε να κάνουμε το αντικείμενο μας να κινηθεί σωστά. Ο κώδικάς για την επανάληψη (εντολή <Για πάντα>) είναι στην Εικόνα 7.1.4, ενώ γι αυτό που θα εκτελείται συνέχεια με τη βοήθεια της εντολής <Για πάντα> είναι στην Εικόνα 7.1.3.
(Εδώ έχουμε την αρχή του κώδικα του προγράμματος μας όπου θέτουμε την αρχική θέση που θα ξεκινάει το αντικείμενο μας καθώς επίσης και την εντολή < Για πάντα >. ΠΡΟΣΟΧΗ: Στο κενό της εντολής < Για πάντα > βάζουμε τις εντολές της Εικόνας 7.1.3 και την εντολή αυτή θα την εξετάσουμε εκτενέστερα σε παρακάτω κεφάλαια. Παράδειγμα 2 Χόρεψε με τη σειρά Όπως είχαμε πει και στην εισαγωγή της υποενότητας 7.1 πως κάτι ακόμα που θα μπορούσαμε να κάνουμε είναι να κάνουμε ένα αντικείμενο να χορεύει. Για να μην είμαστε κουραστικοί και μονότονοι χρησιμοποιώντας μόνο την εντολή <αλλαγή σε ενδυμασία > θα κάνουμε χρήση της εντολής <επόμενη ενδυμασία>. Ας σκεφτούμε λοιπόν! Μπορούμε να αντικαταστήσουμε όλες τις εντολές της μορφής <αλλαγή σε ενδυμασία > με την εντολή της μορφής <επόμενη ενδυμασία>? Δυστυχώς η απάντηση μας δεν είναι ούτε καταφατική, ούτε αρνητική και μπορούμε να συμβιβαστούμε σε μια μέση κατάσταση. Δηλαδή στο πρώτο μας παράδειγμα μπορούμε να κάνουμε χρήση της εντολής <επόμενη ενδυμασία> με αυτές τις ενδυμασίες που διαθέτουμε και στη σειρά που τις έχουμε τοποθετήσει. Όμως άμα είχαμε κάνει το παράδειγμα με την μπαλαρίνα δε θα μπορούσαμε διότι οι κινήσεις δε θα επαναλαμβάνονταν με την ίδια σειρά όπως κάνουμε στην περίπτωση που περπατάμε. Ας δούμε το αντικείμενό μας να χορεύει κάνοντας χρήση της εντολής <επόμενη ενδυμασία>, αλλά και τη μεταβλητή κατάστασης για να βλέπουμε στο περιβάλλον εκτέλεσης του προγράμματος ποια ενδυμασία εμφανίζεται εκείνη τη στιγμή. Έτσι θα μπορούσαμε να έχουμε τις παρακάτω εντολές : Με τις εντολές αυτές και έχοντας επιλέξει την παραπάνω επιλογή θα είχαμε τα εξής ενδεικτικά αποτελέσματα : Εικόνα 7.1.6 ΠΡΟΣΟΧΗ: Το αποτέλεσμα που θα παραχθεί από το πρόγραμμα μας (κάνοντας χρήση της εντολής <επόμενη ενδυμασία>) εξαρτάται πολύ από τη σειρά που έχουμε επιλέξει τις ενδυμασίες στο αντικείμενό μας.
Μην ξεχνάμε πως στα κόμικς δεν έχουμε μόνο τον πρωταγωνιστή, αλλά και τους υπόλοιπους χαρακτήρες που απαρτίζουν την ιστορία όπου θα αλληλεπιδρούν μεταξύ τους. Οι χαρακτήρες αλληλεπιδρούν μεταξύ τους μιλώντας ή κάνοντας ταυτόχρονες κινήσεις. Για να είναι ρεαλιστικές αυτές οι κινήσεις θα πρέπει ορισμένες φορές να γίνεται σωστή χρήση του επιπέδου σε μια εικόνας. Τι είναι όμως το επίπεδο? Στις φωτογραφίες μας δεν είμαστε πάντα ο ένας δίπλα στον άλλο, αλλά μπορεί κάποιος να βρίσκεται μπροστά από κάποιον άλλο ή αν όχι ολόκληρος τότε κάποιο σημείο του σώματός του μπορεί να βρίσκεται πιο μπροστά. Αν δεν γίνεται κατανοητό με λόγια ας το δούμε μέσα από ένα παράδειγμα. Έστω πως έχουμε μια εικόνα από το γνωστό σε όλου μας κόμικ Αστερίξ και Οβελίξ (Βλέπουμε Εικόνα 7.1.7 ). Εικόνα 7.1.7 Εδώ μπορούμε να κατανοήσουμε ευκολότερα τις έννοιες του πρώτου πλάνου και του επιπέδου σε μια εικόνα. Εδώ βλέπουμε πως σε πρώτο πλάνο βρίσκεται η κάτω όψη του ιπτάμενου χαλιού και μετά βρίσκονται τα υπόλοιπα αντικείμενα. Έτσι μπορούμε να διακρίνουμε πως το αντικείμενο με τα άσπρο καπέλο και τα γυαλάκια όπως επίσης και ο ιντεφίξ (ο σκύλος ) είναι ένα επίπεδο πίσω από την κάτω όψη του χαλιού, ενώ ο οβελίξ είναι ένα επίπεδο πίσω από τον ιντεφίξ και δύο επίπερα πίσω από την κάτω όψη του χαλιού Έτσι άλλες 2 εντολές που θα μας ήταν ιδιαίτερα χρήσιμες, για να μπορέσουμε να ορίζουμε επίπεδα για τα αντικείμενά μας είναι η <πήγαινε σε πρώτο πλάνο> και η <πήγαινε πίσω <1> επίπεδο>. Αρχικά τα αντικείμενα δεν έχουν ένα συγκεκριμένο επίπεδο στο περιβάλλον εκτέλεσης του προγράμματος, αλλά τυχαία (συνήθως το αντικείμενο που χειριστήκαμε τελευταίο είναι επιλέγεται αυτόματα να είναι σε πρώτο πλάνο). Γι αυτό το λόγο θα χρειαστεί να ορίζουμε κάθε φορά το επίπεδο στο οποίο επιθυμούμε να είναι το κάθε αντικείμενο. Μπορούμε να δημιουργήσουμε ένα απλό πρόγραμμα για κατανόηση όπου θα έχουμε 3 αντικείμενα ορισμένα στο ίδιο σημείο όπου και να είναι και τα 3 σε πρώτο πλάνο, κάνοντας χρήση της εντολής <πήγαινε σε πρώτο πλάνο > (το ίδιο μπορεί να συμβεί αν κάνουμε χρήση της εντολής <πήγαινε πίσω 0
επίπεδο> ). Παράδειγμα 3 Είμαι πιο Μπροστά απ' όλους... με τη βοήθεια εντολών... Έτσι θα έχουμε τις παρακάτω εντολές (βλέπε. Εικόνα 7.1.8) που θα είναι ίδιες για κάθε αντικείμενο : Εικόνα 7.1.8 Άρα έστω πως έχουμε τα εξής αντικείμενα : Εδώ απλά θέτουμε τη θέση x=0, y=0 και λέμε και στα 3 αντικείμενα είναι σε πρώτο πλάνο. Αν εκτελέσουμε αυτό θα διαπιστώσουμε πως κάθε φορά που το εκτελούμε διαφορετικό αντικείμενο βρίσκεται μπροστά από τα υπόλοιπα. Εικόνα 7.1.9 Εικόνα 7.1.10 Εικόνα 7.1.11 Αν εκτελούμε κάθε φορά τον ίδιο κώδικα τη μια φορά θα έχουμε το αποτέλεσμα της Εικόνας 7.1.12 και την επόμενη φορά θα έχουμε το αποτέλεσμα της Εικόνας 7.1.13. Εικόνα 7.1.12 Εικόνα 7.1.13 Θα μπορούσαμε να κάνουμε χρήση της εντολής <πήγαινε πίσω 1 επίπεδο> (όπου τον αριθμό θα τον αλλάζουμε ανάλογα με το επίπεδο που επιθυμούμε)προκειμένου να μην αφήνουμε τίποτα στην τύχη. Έτσι θα μπορούσαμε αν θέλαμε το αποτέλεσμα της Εικόνας 7.1.12 να εκτελούσαμε τον κώδικα της Εικόνας 7.1.14 (όπου αντιστοιχούνε στα αντικείμενα των Εικόνων 7.1.9-11) και διαφορετικά αν θέλαμε το αποτέλεσμα της Εικόνας 7.1.13 να εκτελούσαμε τον κώδικα της Εικόνας 7.1.15.
Εικόνα 7.1.14 Εικόνα 7.1.15 Το παραπάνω παράδειγμα ήταν μια ιδιαίτερη περίπτωση που εξαρτάται αν δημιουργήθηκε ένα αντικείμενο πριν από ένα άλλο. Ας σκεφτούμε ένα κάποια παραδείγματα τα οποία χρειάζονται τη σωστή χρήση των επιπέδων προκειμένου να επιτευχθεί το επιθυμητό αποτέλεσμα. Ένα απλό παράδειγμα είναι το γνωστό βίντεο παιχνίδι πακ-μαν το οποίο όταν τρώμε τα φρούτα που εμφανίζονται το αντικείμενο που χρησιμοποιήσουμε εμφανίζεται σε πρώτο πλάνο ενώ το φρούτο ένα επίπεδο πιο πίσω και αντίθετα όταν τα φαντάσματα τρώνε το αντικείμενό μας τότε το αντικείμενό μας βρίσκεται ένα επίπεδο πιο πίσω από το φάντασμα. Παράδειγμα 4 Πακ-Μαν... Ας προσπαθήσουμε να υλοποιήσουμε το παραπάνω. Θα κάνουμε μια πολύ απλή μορφή του παιχνιδιού όπου προς το παρόν το μοναδικό που γνωρίζουμε είναι να κινούνται ομαλά τα αντικείμενά μας, να αλλάζουν ενδυμασίες και τώρα θα δούμε πως θα ορίσουμε το επίπεδο που θα βρίσκονται τα αντικείμενά μας. Έτσι κάνουμε χρήση 3 αντικειμένων : το πρώτο θα είναι το πακμαν ( το οποίο θα έχει 2 ενδυμασίες μια αυτή που θα κινείται ( Εικόνα 7.1.16 ) και μια αυτή που θα τρώει τα φρούτα που θα συναντάει ( Εικόνα 7.1.17 ) ) το δεύτερο θα είναι το φρούτο ( Εικόνα 7.1.18 ) και τρίτο θα είναι το φάντασμα ( Εικόνα 7.1.19 ). Ας καθορίσουμε λοιπόν ποιο θα είναι το επίπεδο που θα βρίσκονται τα αντικείμενά μας και ποια θα είναι η υλοποίηση του παραδείγματός μας. Στο παράδειγμά μας το πακ-μαν θα κινείται και θα τρώει το φρούτο και στη συνέχεια το φάντασμα θα τρώει το πακ-μαν. Βάση του προηγούμενου θα ορίσουμε και τα επίπεδα που θα βρίσκετε το κάθε αντικείμενο. Αφού το πακ-μαν θα τρώει τρώει φρούτο σημαίνει πως το πακ-μαν θα είναι ένα επίπεδο πίσω από το φρούτο και επίσης, αφού το φάντασμα θα τρώει το πακ-μαν σημαίνει πως το φάντασμα θα είναι ένα επίπεδο πιο πίσω από το πακ-μαν. Έτσι θα πρέπει το φάντασμα να είναι σε πρώτο πλάνο, το πακ-μαν 1 επίπεδο πιο πίσω και το φρούτο να είναι 2 επίπεδα πιο πίσω. Εικόνα 7.1.16 Εικόνα 7.1.17 Εικόνα 7.1.18 Εικόνα 7.1.19
Για να δούμε τι εντολές θα εκτελεί το κάθε αντικείμενό μας. Αρχικά ας ξεκινήσουμε με τα πιο εύκολα που είναι με το φρούτο το οποίο θα έχει τις εντολές όπου θα του καθορίζουμε σε ποια θέση θα βρίσκεται και πως θα είναι 2 επίπεδα πίσω. Ο κώδικας του φρούτου είναι στην Εικόνα 7.1.20. Στη συνέχεια ας δούμε τι θα κάνει το αντικείμενο πακ-μαν. Βλέπουμε στην Εικόνα 7.1.21 πως ορίζουμε την αρχική του θέση, έπειτα ορίζουμε πως θα βρίσκεται 1 επίπεδο πίσω και μετά του λέμε να εκτελέσει ομαλή κίνηση στο σημείο που έχουμε θέση τη θέση του φρούτου. Όταν φτάσει εκεί θα αλλάξει ενδυμασία και θα έχει τη μορφή που τρώει θα περιμένει μισό δευτερόλεπτο και θα ξανά επανέλθει στην προηγούμενή του μορφή. Τέλος στην Εικόνα 7.1.22 έχουμε τον κώδικα που θα εκτελέσει το αντικείμενο φάντασμα. Ορίζουμε την αρχική του θέση, μετά επιλέγουμε να είναι στο πρώτο πλάνο ( γιατί όπως εξηγήσαμε προηγουμένως πως τα υπερκαλύπτει όλα ), του λέμε να περιμένει 1 δευτερόλεπτο ( ή όσο χρόνο χρειάζεται μέχρι να φτάσει το πακ-μαν στο φρούτο ) και στο τέλος του λέμε κινηθεί ομαλά στο σημείο που είναι και το πακ-μαν και του φρούτο για να φάει το πακ-μαν. Εικόνα 7.1.20 Εικόνα 7.1.21 Εικόνα 7.1.22 Στην Εικόνα 7.1.23 θα έχουμε την αρχική διάταξη των αντικειμένων μας, στην Εικόνα 7.1.24 θα έχουμε μια ενδιάμεση κατάσταση και στην Εικόνα 7.1.25 θα έχουμε την τελική κατάσταση των αντικειμένων μας.
Εικόνα 7.1.23 Εικόνα 7.1.24 Εικόνα 7.1.25