Γράφοντας το πρώτο σας παιχνίδι στο Android χρησιμοποιώντας το SDK Corona

Συγγραφέας: Randy Alexander
Ημερομηνία Δημιουργίας: 1 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 26 Ιούνιος 2024
Anonim
Java Multithreading : AtomicReference, ScheduledExecutorService и монада Either. Многопоточность.
Βίντεο: Java Multithreading : AtomicReference, ScheduledExecutorService и монада Either. Многопоточность.

Περιεχόμενο


Η πιο δημοφιλής κατηγορία στο Google Play Store ήταν πάντα τα Παιχνίδια. Παρόλο που όλοι πιθανότατα χρησιμοποιούμε βασικές εφαρμογές παραγωγικότητας, όπως ένα πρόγραμμα περιήγησης ιστού, έναν πελάτη ηλεκτρονικού ταχυδρομείου και μια εφαρμογή άμεσων μηνυμάτων, το παιχνίδι εξακολουθεί να αποτελεί σημαντικό μέρος της εμπειρίας κινητής τηλεφωνίας. Δεν είναι λοιπόν έκπληξη το γεγονός ότι πολλοί άνθρωποι που θέλουν να μάθουν να αναπτύσσονται για το Android θέλουν να ξεκινήσουν κάνοντας ένα παιχνίδι. Επίσης, ας είμαστε ειλικρινείς, γράφοντας ένα παιχνίδι είναι ένα ολόκληρο φορτίο πιο διασκεδαστικό από την ανάπτυξη μιας εφαρμογής παραγωγικότητας!

Η επίσημη γλώσσα του Android είναι η Java και το επίσημο περιβάλλον ανάπτυξης είναι το Android Studio. Αν θέλετε να εξετάσετε την Java τότε σας προτείνω το σεμινάριο βασικών λειτουργιών της Java και αν θέλετε να μάθετε πώς να γράφετε μια εφαρμογή χρησιμοποιώντας το Android Studio τότε σας προτείνω να δείτε το σεμινάριό μας για τη σύνταξη της πρώτης σας εφαρμογής Android. Ωστόσο, το Java και το Android studio δεν είναι οι μοναδικοί τρόποι ανάπτυξης για το Android. Μπορείτε να βρείτε μια επισκόπηση των διαθέσιμων γλωσσών και των SDK στον οδηγό μας: Θέλω να αναπτύξω εφαρμογές Android - Ποιες γλώσσες θα πρέπει να μάθω;


Ένα από τα SDK που αναφέρονται στον οδηγό γλωσσών προγραμματισμού είναι το Corona, ένα SDK τρίτων κατασκευαστών που έχει σχεδιαστεί κυρίως για παιχνίδια γραφής. Αντί της Java, το Corona χρησιμοποιεί Lua, μια γρήγορη γλώσσα scripting που είναι εύκολο να μάθει αλλά ισχυρή. Ωστόσο, η Corona δεν είναι η μόνη SDK παιχνιδιών για κινητά που χρησιμοποιεί το Lua, ενώ άλλα γνωστά παραδείγματα περιλαμβάνουν τα Cocos2d-X, Marmalade και Gideros.

Λήψη και εγκατάσταση

Για να ξεκινήσετε με το Corona, θα χρειαστεί να κατεβάσετε και να εγκαταστήσετε το SDK. Μεταβείτε στον ιστότοπο Corona και πατήστε το κουμπί λήψης. Θα χρειαστεί να δημιουργήσετε έναν λογαριασμό (ο οποίος είναι δωρεάν) για να μπορείτε να κάνετε λήψη του κιτ. Εάν θέλετε να δημιουργήσετε ένα πραγματικό αρχείο .apk και όχι μόνο να εκτελέσετε το πρόγραμμα στον εξομοιωτή, θα χρειαστεί να εγκαταστήσετε το Java 7, ωστόσο δεν θα χρειαστεί να εγκαταστήσετε το Android SDK. Για να εγκαταστήσετε το Java 7 Development Kit πηγαίνετε στον ιστότοπο της Oracle, αναζητήστε την ενότητα "Java SE Development Kit 7u79" και κάντε λήψη της έκδοσης για τον υπολογιστή σας.


Μόλις εγκαταστήσετε το Corona θα πρέπει να το ενεργοποιήσετε. Αυτή είναι μια εφάπαξ διαδικασία, η οποία είναι δωρεάν. Ξεκινήστε το Simulator Corona και συμφωνήστε με την άδεια. Πληκτρολογήστε τη διεύθυνση ηλεκτρονικού ταχυδρομείου και τον κωδικό πρόσβασης που χρησιμοποιήσατε για τη λήψη και κάντε κλικ στην επιλογή Σύνδεση.

Έναρξη του έργου

Από το Simulator Corona κάντε κλικ στο "Νέο Έργο". Εισάγετε ένα όνομα για την εφαρμογή σας στο πεδίο "Όνομα Εφαρμογής:" και αφήστε τις υπόλοιπες ρυθμίσεις στις προεπιλογές τους. Κάντε κλικ στο κουμπί "OK".

Θα εμφανιστούν τρία παράθυρα. Οι πρώτοι δύο είναι ο προσομοιωτής Corona και η εξομοιωμένη έξοδος Corona. Το Corona θα ανοίξει επίσης ένα παράθυρο εξερευνητών αρχείων που θα δείχνει τα αρχεία του έργου σας.

Η πλειοψηφία των αρχείων (περίπου 23 από αυτά) στον κατάλογο του έργου είναι για το εικονίδιο εφαρμογής! Το πιο σημαντικό αρχείο για μας τώρα είναι main.lua, καθώς εδώ θα γράψουμε τον κώδικα για την εφαρμογή μας.

Εισαγωγή στη Lua

Πριν να γράψουμε τον κώδικα, πρέπει να κάνουμε μια περιήγηση στο Lua. Ο διερμηνέας Lua (να θυμάστε ότι αυτή είναι μια γλώσσα scripting, όχι μια μεταγλωττισμένη γλώσσα) είναι διαθέσιμη για τα Windows, το OS X και το Linux. Ωστόσο, είναι ενσωματωμένο στο Corona, έτσι ώστε αυτή τη στιγμή δεν χρειάζεται να εγκαταστήσετε κάτι επιπλέον. Ο ευκολότερος τρόπος να παίξετε με τον Lua είναι να χρησιμοποιήσετε το online live demo.

Μπορείτε να βρείτε πολλά καλά μαθήματα σχετικά με το Lua online και θα πρέπει να ρίξετε μια ματιά στο Lua Reference Manual, Programming στο Lua, The.Lua.Tutorial, και το Tutorials Point Lua Tutorial.

Εδώ είναι ένα μικρό πρόγραμμα Lua που θα σας δείξει μερικά από τα βασικά χαρακτηριστικά του Lua:

η τοπική συνάρτηση doubleIt (x) επιστρέφει x * 2 τέλος για i = 1,10,1 do x = doubleIt (i) εάν (x == 10) τότε print ("δέκα") else print (doubleIt

Ο παραπάνω κώδικας δείχνει τρεις σημαντικές δομές Lua: λειτουργίες, βρόχους και αν δηλώσεις. Η λειτουργία doubleIt () είναι πολύ απλή, απλά διπλασιάζει την παράμετρο που πέρασε Χ.

Ο κύριος κώδικας είναι α Για βρόχο από 1 έως 10. Καλεί doubleIt () για κάθε επανάληψη. Εάν η τιμή επιστροφής είναι 10 (δηλ. Όταν Εγώ είναι 5) τότε ο κώδικας εκτυπώνει "δέκα" διαφορετικά απλά εκτυπώνει το αποτέλεσμα του doubleIt ().

Εάν έχετε κάποια εμπειρία κωδικοποίησης τότε ο κώδικας παράδειγμα θα πρέπει να είναι αρκετά εύκολος να ακολουθήσει. Αν ψάχνετε να μάθετε κάποιο βασικό προγραμματισμό τότε σας προτείνω να χρησιμοποιήσετε μερικούς από τους πόρους που συνδέονται παραπάνω για να σας βελτιώσουμε τις δεξιότητες.

Γράφοντας το παιχνίδι

Η σύνταξη βασικών προγραμμάτων στο Corona είναι απλή. Χρειάζεται μόνο να ανησυχείς με ένα αρχείο, main.lua, και αφήστε τη Corona να κάνει όλη τη βαριά ανύψωση. Το παιχνίδι που πρόκειται να γράψουμε είναι ένα απλό παιχνίδι "βρύσης". Ένα μπαλόνι ή μια βόμβα θα αποτύχει στην οθόνη. Εάν ο παίκτης σπάσει στο μπαλόνι σκοράρει ένα σημείο, χτυπήσει σε μια βόμβα, τότε το σκορ θα χωριστεί με 2, ως ποινή. Για να γράψετε τον κώδικα που χρειάζεται να επεξεργαστείτε main.lua. Μπορείτε να το κάνετε σε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου.

Το Corona SDK διαθέτει ενσωματωμένη μηχανή φυσικής 2D, η οποία κάνει πολύ πιο εύκολη την οικοδόμηση παιχνιδιών. Το πρώτο βήμα στη συγγραφή του παιχνιδιού είναι να αρχικοποιήσετε τη μηχανή φυσικής:

τοπική φυσική = απαιτούν ("φυσική") physics.start ()

Ο κώδικας είναι αρκετά αυτονόητος. Η φυσική του δομοστοιχείου φορτώνεται και αρχικοποιείται και αντιστοιχεί στη μεταβλητή η φυσικη. Για να ενεργοποιήσετε τον κινητήραphysics.start () λέγεται.

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

μισήW = display.contentWidth * 0.5 μισήH = display.contentHeight * 0.5

ο απεικόνιση Το αντικείμενο είναι ένα προκαθορισμένο αντικείμενο το οποίο η Corona καθιστά διαθέσιμη παγκοσμίως.

Τώρα έρχεται το πρώτο βήμα που πραγματικά κάνει κάτι να συμβεί στην οθόνη:

τοπική bkg = display.newImage ("night_sky.png", halfW, halfH)

Όπως και ιδιότητες όπως contentHeight και contentWidth, ο απεικόνιση αντικείμενο έχει επίσης πολλές χρήσιμες λειτουργίες. ο νέα εικόνα() λειτουργία διαβάζει ένα αρχείο εικόνας (στην περίπτωση αυτή ένα .png) και εμφανίζει την οθόνη. Τα αντικείμενα εμφάνισης απεικονίζονται σε στρώματα, επομένως επειδή αυτή είναι η πρώτη εικόνα που τοποθετούμε στην οθόνη τότε θα είναι πάντα το φόντο (εκτός αν ο κώδικας κάνει κάτι κάτι τέτοιο). Οι παράμετροι μισή ώρα και μισή ώρα πείτε στο Corona να τοποθετήσει την εικόνα στη μέση.

Σε αυτό το σημείο μπορείτε να εκτελέσετε τον κώδικα στον εξομοιωτή και να δείτε την εικόνα φόντου. Αν αποθηκεύσετε το αρχείο τότε ο εξομοιωτής θα παρατηρήσει ότι το αρχείο έχει αλλάξει και προσφέρεται για επανεκκίνηση. Εάν αυτό δεν συμβεί, χρησιμοποιήστε το File-> Restart.

Δεδομένου ότι ο χρήστης θα κερδίσει πόντους για να πατήσει σε μπαλόνια, πρέπει να αρχικοποιήσουμε μια μεταβλητή βαθμολογίας και να εμφανίσουμε την βαθμολογία στην οθόνη:

score = 0 scoreText = display.newText (σκορ, μισόW, 10)

Η βαθμολογία θα διατηρηθεί στη μεταβλητή με φαντασία σκορ,και scoreText είναι το αντικείμενο που εμφανίζει το σκορ. Αρέσει νέα εικόνα(), newText () βάλτε κάτι στην οθόνη, σε αυτή την περίπτωση κείμενο. Από scoreText είναι μια παγκόσμια μεταβλητή τότε μπορούμε να αλλάξουμε το κείμενο σε οποιοδήποτε σημείο. Αλλά θα φτάσουμε σε αυτό σύντομα.

Μπορείτε να επαναφέρετε τον προσομοιωτή και να δείτε το σκορ 0 εμφάνισης προς το επάνω μέρος της οθόνης.

Αριστερά: Απλά το φόντο. Δεξιά: Ιστορικό και σκορ.

Τώρα έρχεται κάτι λίγο πιο δύσκολο, αλλά μην ανησυχείτε θα το εξηγήσω από τη γραμμή:

(event.phase == "ξεκίνησε") τότε Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

Ο παραπάνω κώδικας ορίζει μια λειτουργία που ονομάζεται μπαλόνιΤακωμένο () η οποία θα καλείται κάθε φορά που μπαλόνι είναι tapped. Δεν έχουμε πει ακόμα στην Corona να καλέσει αυτή τη λειτουργία κάθε φορά που μπαίνει το μπαλόνι, που θα έρθει αργότερα, αλλά όταν το κάνουμε αυτό είναι η λειτουργία που καλείται.

Πατήστε ή αγγίξτε συμβάντα έχουν πολλά στάδια, πολλά για να υποστηρίξετε τη μεταφορά. Ο χρήστης βάζει το δάχτυλό του σε ένα αντικείμενο, αυτή είναι η φάση "ξεκίνησε". Αν γλιστρήσουν το δάχτυλό τους σε οποιαδήποτε κατεύθυνση, αυτή είναι η φάση "μετακινήθηκε". Όταν ο χρήστης σηκώνει το δάχτυλό του από την οθόνη, αυτή είναι η φάση "έληξε".

Η πρώτη γραμμή του μπαλόνιΤακωμένο () ελέγχους είμαστε στη φάση "ξεκίνησε". Θέλουμε να αφαιρέσουμε το μπαλόνι και να αυξήσουμε το σκορ όσο το δυνατόν συντομότερα. Αν η λειτουργία καλείται και πάλι για άλλες φάσεις όπως "τελείωσε" τότε η λειτουργία δεν κάνει τίποτα.

μεσα στηναν είναι τέσσερις γραμμές κώδικα. Ας ασχοληθούμε πρώτα με τα τελευταία δύο, καθώς είναι απλούστερα.βαθμολογία = βαθμολογία + 1 απλά αυξάνει το σκορ κατά ένα καιscoreText.text = βαθμολογία αλλάζει το κείμενο βαθμολογίας στην οθόνη για να αντικατοπτρίζει το νέο σκορ. Θυμηθείτε πώς το είπα αυτόscoreText ήταν παγκόσμια και θα μπορούσε να έχει πρόσβαση οπουδήποτε, και αυτό είναι που κάνουμε εδώ.

Τώρα για τις δύο πρώτες γραμμές. Μόλις πέσει ένα μπαλόνι ή μια βόμβα από το κάτω μέρος της οθόνης, εξακολουθεί να υπάρχει στη μνήμη της εφαρμογής, είναι απλά ότι δεν μπορείτε να το δείτε. Καθώς το παιχνίδι εξελίσσεται, ο αριθμός αυτών των αντικειμένων εκτός οθόνης θα αυξηθεί σταθερά. Επομένως, πρέπει να έχουμε έναν μηχανισμό ο οποίος θα διαγράφει αντικείμενα όταν δεν είναι ορατοί. Το κάνουμε αυτό σε μια λειτουργία που ονομάζεταιoffscreen, το οποίο δεν έχουμε γράψει ακόμα. Αυτή η λειτουργία θα κληθεί μία φορά ανά πλαίσιο κατά τη διάρκεια του παιχνιδιού. Μόλις χτυπηθεί ένα μπαλόνι τότε πρέπει να το διαγράψουμε και να αφαιρέσουμε την κλήση που ελέγχει αν το μπαλόνι έχει ξεπεράσει την οθόνη.

Η γραμμήevent.target:removeSelf () διαγράφει το μπαλόνι. Όταν συμβαίνει ένα συμβάν αφής, μία από τις παραμέτρους της συνάρτησης ακρόασης είναι ηΕκδήλωση παράμετρο. Λέει τη λειτουργία σχετικά με το συμβάν και τον τύπο του συμβάντος, π.χ.event.phase. Μας λέει επίσης ποιο μπαλόνι τραβήχτηκε,event.target. οremoveSelf () η λειτουργία κάνει αυτό που λέει ότι κάνει, διαγράφει το αντικείμενο (στην περίπτωση αυτή ένα μπαλόνι).

Η γραμμή πριν από αυτό αφαιρεί τον ακροατή "enterframe", η οποία είναι η λειτουργία που ονομάζεται κάθε καρέ για να δείτε αν το μπαλόνι έχει πέσει από το κάτω μέρος της οθόνης. Θα εξετάσουμε αυτό με περισσότερες λεπτομέρειες όταν θα έρθουμε να γράψουμε τοoffscreen λειτουργία ακρόασης.

Έτσι, για να ανακεφαλαιώσετε.μπαλόνιΤακωμένο ()ελέγχει ότι αυτή είναι η αρχή της ακολουθίας αφής. Στη συνέχεια, αφαιρεί τον ακροατή "enterframe", η οποία είναι η λειτουργία που ονομάζεται κάθε καρέ για να δείτε αν το μπαλόνι έχει πέσει από το κάτω μέρος της οθόνης. Στη συνέχεια διαγράφει το μπαλόνι, αυξάνει το σκορ και εμφανίζει το νέο σκορ.

Αυτό ήταν για μπαλόνια, τώρα χρειαζόμαστε κάτι παρόμοιο για βόμβες:

(event.phase == "ξεκίνησε") τότε Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (βαθμολογία * 0.5) scoreText.text = end end end

Όπως βλέπετε, ο κώδικας είναι πολύ παρόμοιος με την εξαίρεση ότι αντί να αυξάνεται η βαθμολογία, η βαθμολογία πολλαπλασιάζεται με το 0,5 (δηλ. Διαιρείται με 2). ο math.floor () λειτουργία στρογγυλοποιεί το σκορ στον πλησιέστερο ακέραιο αριθμό. Έτσι, αν ο παίκτης είχε βαθμολογία 3 και χτύπησε μια βόμβα τότε το νέο σκορ θα ήταν 1, και όχι 1,5.

Ανέφερα το offscreen () λειτουργία νωρίτερα. Αυτή η λειτουργία θα ονομάζεται κάθε πλαίσιο για να ελέγξει αν ένα αντικείμενο έχει σβήσει από την οθόνη. Εδώ είναι ο κώδικας:

(self.y == μηδέν) τότε επιστρέψτε το τέλος αν (self.y> display.contentHeight + 50) τότε Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Στον υπολογισμό υπάρχει μια κατάσταση που είναι γνωστή ως κατάσταση της κούρσας. Αυτό είναι όπου δύο πράγματα πρόκειται να συμβεί, αλλά θα μπορούσε να συμβεί πρώτο, ή μερικές φορές το άλλο θα μπορούσε να συμβεί πρώτο. Είναι ένας αγώνας. Κάποιες συνθήκες αγώνων είναι αόρατες επειδή ένα πράγμα φαίνεται πάντα να συμβαίνει πρώτα, αλλά μπορεί να προκαλέσει ενδιαφέροντα σφάλματα σε μια μέρα, υπό τις κατάλληλες συνθήκες, το άλλο πράγμα συμβαίνει πρώτα και τότε το σύστημα σπάει!

Υπάρχει μια κούρσα σε αυτό το απλό παιχνίδι, επειδή δύο πράγματα μπορούν να συμβούν πολύ κοντά το ένα στο άλλο: ένα μπαλόνι που τραβιέται και το offscreen () η οποία καλείται να δει αν το μπαλόνι έχει βγει από την οθόνη. Το αποτέλεσμα είναι ότι ο κωδικός για να διαγράψετε το μπαλόνι μπορεί να καλείται και στη συνέχεια το offscreen () (που συμβαίνει 30 φορές ανά δευτερόλεπτο). Για να ξεφύγετε από αυτή την περίεργη ακολουθία των γεγονότων offscreen () πρέπει να ελέγξει αν το y αξία του αντικειμένου είναι μηδέν (null) ή όχι. Εάν είναι μηδέν τότε σημαίνει ότι το αντικείμενο έχει ήδη διαγραφεί, οπότε προχωρήστε, δεν πρόκειται για τα droids που ψάχνουμε.

Εάν το αντικείμενο βρίσκεται ακόμα σε παιχνίδι, ελέγξτε τη θέση του, εάν έχει περάσει 50 pixels από την οθόνη, στη συνέχεια διαγράψτε και αφαιρέστε τον ακροατή έτσι ώστε offscreen () η λειτουργία δεν θα καλέσει ξανά για αυτό το αντικείμενο. Ο κώδικας για να σιγουρευτεί αυτόoffscreen () ονομάζεται κάθε πλαίσιο είναι μέρος του επόμενου τμήματος του κώδικα.

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

τοπική συνάρτηση addNewBalloonOrBomb () local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) αν (math.random (1,5) == 1) τότε - BOMB! τοπική βόμβα = display.newImage ("bomb.png", startX, -300) physics.addBody (βόμβα) bomb.enterFrame = offscreen Χρόνος εκτέλεσης: addEventListener ("enterFrame", βόμβα): addEventListener - Balloon local balloon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (μπαλόνι) balloon.enterFrame = offscreen Διάρκεια: μπαλόνι addEventListener ("enterFrame", μπαλόνι): addEventListener μπαλόνιΤο άκρη)

Η πρώτη γραμμή της λειτουργίας αποφασίζει πού θα πέσει το μπαλόνι από το Χ επίπεδο. Αν το μπαλόνι ή η βόμβα πέσει πάντα στη μέση, αυτό δεν θα είναι πολύ ενδιαφέρον! ΈτσιstartX είναι ένας τυχαίος αριθμός μεταξύ 10% και 90% του πλάτους της οθόνης.

Στη συνέχεια επιλέγεται ένας τυχαίος αριθμός μεταξύ 1 και 5.Εάν ο αριθμός είναι 1 τότε θα βγει μια βόμβα. Εάν είναι 2, 3, 4 ή 5, τότε ένα μπαλόνι θα πέσει. Αυτό σημαίνει ότι οι βόμβες θα πέσουν γύρω στο 20% του χρόνου.

Η βόμβα και ο κώδικας μπαλονιών είναι αρκετά όμοια. Πρώτα εμφανίζεται η εικόνα (είτε μια βόμβα είτε ένα μπαλόνι)νέα εικόνα(). Του Χ θέση είναι εκείνη τουstartX ενώ το y η θέση είναι ρυθμισμένη στο -300, δηλ. από την κορυφή της οθόνης. Ο λόγος για αυτό είναι ότι θέλουμε το αντικείμενο να πέσει έξω από την περιοχή της οθόνης στην ορατή περιοχή και έπειτα από το κάτω μέρος. Δεδομένου ότι χρησιμοποιούμε τη μηχανή 2D φυσικής είναι καλό να δώσουμε στο αντικείμενο λίγο μια αρχική απόσταση για να πέσει, έτσι ώστε να μπορεί να κερδίσει κάποια ταχύτητα.

Η κλήση προςphysics.addBody () λαμβάνει την εικόνα που έχει φορτωθεί νέα εικόνα() και το μετατρέπει σε ένα αντικείμενο στη μηχανή φυσικής. Αυτό είναι πολύ ισχυρό. Οποιοδήποτε αρχείο εικόνας μπορεί να γίνει σε ένα σώμα το οποίο αποκρίνεται με τη βαρύτητα και τις συγκρούσεις μόλις καλώνταςphysics.addBody ().

Οι τελευταίες τρεις γραμμές της βόμβας ή του κωδικού μπαλονιού έθεσαν τους ακροατές. Ρύθμιση τουenterFrame η ιδιότητα λέει στη Corona τη λειτουργία που καλεί κάθε καρέ και την κλήσηΔιάρκεια εκτέλεσης: addEventListener () το θέτει. Τελικά η κλήση προςμπαλόνι: addEventListener () λέει στη Corona ποια λειτουργία πρέπει να καλέσει αν αγγίξει η βόμβα ή το μπαλόνι.

Και τώρα το παιχνίδι είναι σχεδόν πλήρες. Χρειαζόμαστε μόνο δύο άλλες σειρές κώδικα:

addNewBalloonOrBomb () timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Η πρώτη γραμμή κάνει την πρώτη βόμβα ή μπαλόνι πτώση κάνοντας ρητή κλήσηaddNewBalloonOrBomb (). Η δεύτερη γραμμή δημιουργεί ένα χρονόμετρο που θα καλέσειaddNewBalloonOrBomb () κάθε μισό δευτερόλεπτο (500 χιλιοστά του δευτερολέπτου). Αυτό σημαίνει ότι ένα νέο μπαλόνι ή βόμβα θα πέσει κάθε μισό δευτερόλεπτο.

Τώρα μπορείτε να εκτελέσετε το παιχνίδι στον εξομοιωτή.

Εδώ είναι η πλήρης λίστα για το main.lua, ο πλήρης πηγαίος κώδικας του έργου για αυτό το παιχνίδι μπορεί να βρεθεί εδώ στο GitHub.

-------------------------------------------------- --------------------------------------- - - Πτώση μπαλονιών και βομβιστικών παιχνιδιών - Γράφτηκε από τον Gary Sims για - ------------------------------------------- ---------------------------------------------- - Εκκίνηση του physics.start () - Υπολογίστε το ήμισυ του πλάτους και του ύψους της οθόνης halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5 - Ρυθμίστε το τοπικό φόντο bkg = display.newImage ("night_sky.png", halfW, halfH) - Αποτέλεσμα βαθμολογίας = 0 scoreText = display.newText (σκορ, halfW, 10) - Ονομάζεται όταν το μπαλόνι πιέζεται από τη συσκευή αναπαραγωγής - Αύξηση βαθμολογίας κατά 1 τοπική λειτουργία balloonTouch ( (event.phase == "ξεκίνησε") τότε Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = end end end - Ονομάζεται όταν η βόμβα τραβιέται από τον παίκτη - Το μισό του πέναλτι ως πέναλτι τοπική λειτουργία bTouched (event) if (event.phase == "ξεκίνησε") τότε Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = end end end - Διαγραφή αντικειμένων που έχουν πέσει από το (self.y == μηδέν) τότε επιστρέψτε στο τέλος αν (self.y> display.contentHeight + 50) τότε Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end - Προσθέστε ένα νέο μπαλόνι ή βόμβα τοπική λειτουργία addNewBalloonOrBomb () - Μπορείτε να βρείτε red_ballon.png και bomb.png στο τοπικό repo GitHub startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) αν (math.random (1,5) == 1) τότε - BOMB! τοπική βόμβα = display.newImage ("bomb.png", startX, -300) physics.addBody (βόμβα) bomb.enterFrame = offscreen Χρόνος εκτέλεσης: addEventListener ("enterFrame", βόμβα): addEventListener - Balloon local balloon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (μπαλόνι) balloon.enterFrame = offscreen Διάρκεια: μπαλόνι addEventListener ("enterFrame", μπαλόνι): addEventListener () - Προσθέστε ένα νέο μπαλόνι ή βόμβα τώρα addNewBalloonOrBomb () - Συνεχίστε να προσθέτετε ένα νέο μπαλόνι ή βόμβα κάθε 0,5 δευτερόλεπτα timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Επόμενα βήματα

Το επόμενο βήμα είναι να παίξετε το παιχνίδι σε μια πραγματική συσκευή Android. Για να δημιουργήσετε ένα αρχείο .apk, κάντε κλικ στο File-> Build for Android ... και συμπληρώστε τα πεδία. Το αποτέλεσμα θα είναι ένα αρχείο .apk το οποίο μπορείτε να αντιγράψετε στη συσκευή σας και στη συνέχεια να το εγκαταστήσετε. Θα πρέπει να βεβαιωθείτε ότι έχετε ρυθμίσει τη συσκευή σας ώστε να επιτρέπει την εγκατάσταση εφαρμογής από άγνωστες πηγές. Το Amazon έχει κάποια καλή τεκμηρίωση σχετικά με αυτό, καθώς πρέπει επίσης να το ρυθμίσετε για να εγκαταστήσετε το Amazon Appstore. Το Corona έχει επίσης έναν οδηγό για τον τρόπο υπογραφής, κατασκευής και δοκιμής της εφαρμογής σας σε συσκευές Android.

Με το παιχνίδι που εγκαταστάθηκε με επιτυχία στη συσκευή σας, το επόμενο πράγμα που πρέπει να κάνετε είναι να βελτιώσετε το παιχνίδι. Για παράδειγμα, γιατί να μην προσπαθήσετε να προσθέσετε ένα ήχο "ποπ" ή "κτύπημα" ό, τι μπαίνει ένα μπαλόνι ή μια βόμβα. Το Corona διαθέτει ένα API για αυτό:media.playEventSound ().

Ή γιατί να μην προσπαθήσετε να προσθέσετε ένα τρίτο είδος αντικειμένου, πείτε μια σούπερ ώθηση που διπλασιάζει την τρέχουσα βαθμολογία, ή πώς για κάποια μουσική υπόκρουση;

Τύλιξε

Το γράψιμο των παιχνιδιών με το Corona είναι αρκετά απλό, διότι το SDK χειρίζεται πράγματα όπως το OpenGL και περιλαμβάνει μια ενσωματωμένη μηχανή φυσικής 2D. Επίσης, το Lua είναι εύκολο να μάθει και δεν πρέπει να είναι δύσκολο για κανέναν που έχει ακόμη και την ελάχιστη εμπειρία προγραμματισμού. Ο ιστότοπος Coronalabs διαθέτει πολλές τεκμηρίωση, συμπεριλαμβανομένων πολλών οδηγών και σεμιναρίων.

Σε λιγότερο από 100 σειρές κώδικα έχουμε ένα παιχνίδι εργασίας. Εντάξει, δεν πρόκειται να κερδίσει κάποια βραβεία, αλλά δείχνει την ισχύ και την ευελιξία του Corona SDK.

Αναμένουμε πλήρως να δούμε την Google να κυκλοφορήσει τις πρώτες προσπάθειές της μεσαίας κατηγορίας στη γραμμή του Google Pixel σύντομα. Υποτιθέμενα, οι συσκευές θα πωλούνται ως Google Pixel 3a και Go...

Τώρα είναι η ώρα να αρπάξετε ένα φορητό υπολογιστή των Window 10! Η πώληση του Amazon Prime Day είναι σε εξέλιξη, μειώνοντας τις υψηλές τιμές σε φορητούς υπολογιστές από την Acer, την Au, την Dell, τη...

Φρέσκες Θέσεις