133
PC Master
Δημοτικού. Όπως είναι φυσικό, για να
μπορούν να επιβιώνουν στο αφιλόξενο
περιβάλλον της Γης, έχουν κρύψει ειδι-
κούς ατμοσφαιρικούς αναδιομορφωτές σε
πολύχρωμες πλαστικές μπαλίτσες. Θέλου-
με να δημιουργήσουμε το εξής σενάριο: ο
Chris γίνεται μάρτυρας ενός διαλόγου με-
ταξύ μίας δασκάλας και του επιστάτη μιας
αποθήκης. Αν –και μόνο αν– επιλέξει μία
συγκεκριμένη γραμμή διαλόγου, μία μπα-
λίτσα θα κάνει την εμφάνισή της σε κά-
ποιο άλλο δωμάτιο.
Να θυμίσουμε πρώτα πώς δημιουργού-
με ένα δωμάτιο. Έχοντας έτοιμη την ει-
κόνα της αποθήκης μας, κάνουμε δεξί
κλικ στο Rooms του Project Tree και επι-
λέγουμε New Room. Στη συνέχεια κάνου-
με Edit Room, πατάμε το πλήκτρο
Change που βρίσκεται δίπλα στην επιλο-
γή Main Background και βρίσκουμε τη
σχετική εικόνα. Επιλέγουμε Show this
room’s->Walkable areas και ζωγραφίζου-
με τις περιοχές όπου θα κινούνται οι χα-
ρακτήρες. Επειδή όμως ο γραφίστας μας
είναι λίγο ατάλαντος και τα sprites των
χαρακτήρων δεν έχουν όλα το ίδιο μέγε-
θος, θα κάνουμε το εξής τρικ: θα φτιά-
ξουμε τρία Walkable areas διαφορετικού
ζουμ. Έτσι, μετά από λίγο πειραματισμό
οι χαρακτήρες μας θα έχουν μέγεθος που
θα ανταποκρίνεται στο ύψος τους και
στην απόσταση που διατηρούν από την
κάμερα.
Στην ιστορία μας, ένα παιδάκι έχει πά-
ρει μία από τις πλαστικές μπαλίτσες. Αυτή
είναι η πληροφορία που θα μάθουμε,
ώστε να εμφανίζεται η μπάλα έξω από το
σπίτι μας. Δημιουργούμε λοιπόν μία
Global Variable με αρχική τιμή 0 και όνο-
μα TimTookBall. Όταν μάθουμε την πλη-
ροφορία, η τιμή αυτή θα αλλάξει σε 1.
Αφού δημιουργήσουμε τους χαρακτή-
ρες Janitor και Claire, γράφουμε τον με-
ταξύ τους διάλογο. Τον ονομάζουμε
dClaireAndJanitor και ο κώδικάς του είναι
ο παρακάτω (μην ξεχνάτε το κενό πριν
από τις δύο εντολές script):
@
S // Dialog startup entry point
Janitor: I assure you, Ms Claire, this has
never happened before!
Claire: I should hope so! What would a
child do with a plastic ball, anyway?
return
@1
Janitor: Is there something I can help
you with, Chris?
Chris: Which child took the ball you are
talking about?
Janitor: It was Tim Jenkins. You know,
the one that keeps playing in front of
your house.
GiveScore(10);
TimTookBall=1;
option-off 1
return
@2
Stop
Οι δε επιλογές του διαλόγου θα είναι οι
παρακάτω:
1:
I’m sorry to bother you...
2:
Don’t mind me, I’ll be on my way.
Η δασκάλα και ο επιστάτης θα βρίσκο-
νται ήδη στο χώρο της αποθήκης. Ο μετα-
ξύ τους διάλογος θέλουμε να ξεκινά με
την είσοδο του Chris στο χώρο, αλλά μό-
νο μία φορά, όχι να επαναλαμβάνεται κά-
θε φορά που μπαίνουμε στην αποθήκη.
Για να το επιτύχουμε αυτό, από το Project
Grid του Room πατάμε στα Events κι έπει-
τα στο πλήκτρο δίπλα στην επιλογή First
time enters room. Στη συνάρτηση
room_FirstLoad() που δημιουργείται, πλη-
κτρολογούμε την εντολή:
dClaireAndJanitor.Start();
Απομένει να προκαλέσουμε την εμφά-
νιση της μπάλας. Στο τεύχος Ιανουαρίου
την είχαμε τοποθετήσει έξω από το σπίτι.
Στα Events του σχετικού Room πατάμε
στο κουμπί που βρίσκεται δίπλα στην επι-
λογή Enters room before fade-in και στη
συνάρτηση room_Load() που δημιουργεί-
ται, γράφουμε τις γραμμές:
if (TimTookBall==0) oBall.Visible=false;
else oBall.Visible=true;
Προσοχή στην παγίδα που πάει να δημι-
ουργηθεί εδώ. Με τον κώδικα που γράψα-
με, η μπαλίτσα θα εμφανίζεται μπροστά
στο σπίτι εάν ο Chris έχει μάθει ότι την
πήρε ο Tim. Όμως αυτό σημαίνει ότι κάθε
φορά που μπαίνετε στο Room, η μπαλίτσα
θα εμφανίζεται ακόμα κι αν την έχετε πά-
ρει, κάτι που φυσικά δεν θέλουμε. Για να
διασφαλίσουμε ότι δεν θα γίνεται αυτό,
θα φροντίσουμε να μηδενίσουμε την τιμή
της Global Variable τη στιγμή που παίρ-
νουμε την μπάλα. Συνεπώς, η συνάρτηση
oBall_Interact() που καλείται όταν κάνου-
με pick up στην μπάλα, διαμορφώνεται
ως εξής:
function oBall_Interact()
{
oBall.Visible=false;
player.AddInventory(iball);
GiveScore(5);
TimTookBall=0;
}
Το παράδειγμα που μόλις κάναμε μας
βοηθά να κατανοήσουμε ποιες εντολές
εκτελούμε πριν από το fade-in του δωμα-
τίου, προτού, δηλαδή, εμφανιστεί στην
οθόνη, και ποιες μετά. Φανταστείτε το
σαν ένα σκηνικό θεάτρου. Το before
fade-in είναι η προετοιμασία που γίνεται
χωρίς να τη βλέπει ο θεατής, ενώ το after
fade-in τα δρώμενα που θέλουμε να πα-
ρακολουθήσει.
PC
ΣΤΑ ΠΡΟΗΓΟΥΜΕΝΑ ΤΕΥΧΗ
ΔΕΚEΜβΡΙΟΣ 2012:
Αρχικοποίηση adventure game, δημιουργία δωματίου,
ορισμός hotspots.
ΙΑΝΟΥAΡΙΟΣ 2013:
Έξοδοι δωματίων, hotspot interaction, συνθήκες ελέγχου,
global variables, αντικείμενα, inventory items.
ΦΕβΡΟΥAΡΙΟΣ 2013:
Δημιουργία χαρακτήρων, walkable areas, scaling
levels, walk-behinds.
ΜΑΡΤΙΟΣ 2013:
Character interaction, αλληλεπίδραση inventory-χαρακτή-
ρων, δημιουργία διαλόγων.
Μαθαίνοντας την πληροφο-
ρία, θα εμφανιστεί ένα αντι-
κείμενο κάπου αλλού.