Κωδικοποιημένο παράθυρο: Ανοίξτε έναν (αρραυλίστα) στόχων - 💡 Fix My Ideas

Κωδικοποιημένο παράθυρο: Ανοίξτε έναν (αρραυλίστα) στόχων

Κωδικοποιημένο παράθυρο: Ανοίξτε έναν (αρραυλίστα) στόχων


Συγγραφέας: Ethan Holmes, 2019

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

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

Ρυθμίστε το σκίτσο

Πρώτα πράγματα πρώτα - ας πάρουμε το σκίτσο σε λειτουργία. Θα χρειαστείτε δύο αρχεία για αυτό το έργο: magic_words.pde και Target.pde. Πρώτα, ενεργοποιήστε την επεξεργασία και επικολλήστε τον ακόλουθο κώδικα για το magic_words.pde στο κύριο παράθυρο.

Μπορείτε είτε να επισημάνετε την πρώτη γραμμή, να μετακινηθείτε προς τα κάτω και να χρησιμοποιήσετε το Ctrl-c για να αντιγράψετε τον κωδικό (σκληρό) ή μπορείτε να κάνετε κλικ σε αυτόν τον σύνδεσμο (magic_words.pde), πατήστε Ctrl + a για να επιλέξετε όλο το κείμενο, και στη συνέχεια χρησιμοποιήστε το συνδυασμό πλήκτρων Ctrl + c για να το αντιγράψετε (ευκολότερη). Μόλις αντιγράψετε τον κώδικα, επιστρέψτε στην επιλογή Επεξεργασία και επικολλήστε το στο κύριο παράθυρο. Στη συνέχεια, χρησιμοποιήστε "Αρχείο -> Αποθήκευση" από τη γραμμή μενού (ή απλώς Ctrl + s) και αποθηκεύστε το αρχείο χρησιμοποιώντας το όνομα "magic_words" (η επεξεργασία θα προσθέσει αυτόματα το ".pde").

Εδώ είναι το Target.pde, το δεύτερο αρχείο που χρειάζεστε:

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

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

Το τελευταίο πράγμα που πρέπει να κάνουμε είναι να δημιουργήσουμε μια ωραία γραμματοσειρά για τον στόχο. (Οι γραμματοσειρές συζητούνται στο Κεφάλαιο 6 του "Ξεκινώντας με την Επεξεργασία"). Γιατί ρωτάς? Από το κουτί, η επεξεργασία έχει απλά μια απλή εντολή που ονομάζεται κείμενο() που θα εμφανίσει κείμενο, αλλά δεν μπορείτε να πείτε πόσο διάστημα θα καταλάβει στην οθόνη (κάτι που θα είναι σημαντικό, όπως θα δούμε σε ένα λεπτό). Επιπλέον, είναι απλώς παλιό γραμματοσειρά Arial, επομένως δεν είναι πολύ ενδιαφέροντα.

Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε το μενού Εργαλεία για να δημιουργήσετε ένα νέο αρχείο γραμματοσειράς για το σκίτσο σας. Αφού εισαγάγετε το αρχείο χρησιμοποιώντας το loadFont () εντολή, θα μπορείτε να παίξετε τυπογραφικά. (W00t!). Εν πάση περιπτώσει, η διαδικασία για τη δημιουργία μιας γραμματοσειράς είναι απλή. Πρώτα, κάντε κλικ στο "Εργαλεία -> Δημιουργία γραμματοσειράς ..." από τη γραμμή μενού, η οποία θα εμφανίσει την ακόλουθη οθόνη:

Στη συνέχεια, το μόνο που έχετε να κάνετε είναι να επιλέξετε τη γραμματοσειρά που θέλετε (επέλεξα "Baskerville-Bold" · αν θέλετε να χρησιμοποιήσετε διαφορετική γραμματοσειρά, θα πρέπει να αλλάξετε το όνομα του αρχείου γραμματοσειράς magic_words.pde). Παρατηρήστε ότι το όνομα του αρχείου στο κάτω μέρος του πλαισίου αλλάζει καθώς επιλέγετε διαφορετικές επιλογές - αυτό είναι το όνομα του αρχείου που θα χρειαστεί να χρησιμοποιήσετε στο σκίτσο. Η επεξεργασία θα προσθέσει αυτόματα το ".vlw" στο τέλος.

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

Οι επόμενες δύο ενότητες περιγράφουν πώς λειτουργεί το σκίτσο. Το πρώτο μέρος περιγράφει τον κώδικα στο αρχείο Target.pde, το οποίο χρησιμοποιείται για τη δημιουργία του αντικειμένου Target, το κύριο δομικό στοιχείο της δέσμης ενεργειών. Η δεύτερη ενότητα περιγράφει τον τρόπο χρήσης του αρχείου magic_words.pde και το ArrayList για τη διαχείριση πολλών αντικειμένων Target.

Το αντικείμενο Target

Το Κεφάλαιο 9 του "Ξεκινώντας με την Επεξεργασία" εισάγει αντικείμενα και αντικειμενοστραφή προγραμματισμό (OOP). Για να ανασκοπήσετε σύντομα, ένα αντικείμενο είναι ένα δομικό στοιχείο που χρησιμοποιείται για τη δημιουργία πιο εξελιγμένων προγραμμάτων. Τα αντικείμενα περιέχουν δύο βασικά στοιχεία: πεδία, οι οποίες είναι μεταβλητές που καθορίζουν την τρέχουσα κατάσταση του αντικειμένου, και μεθόδων, που είναι μόνο λειτουργίες που κάνουν το αντικείμενο να κάνει κάτι. Ένα βασικό μέρος της δύναμης του OOP είναι ότι σας βοηθά να σκεφτείτε τον κώδικα σας με φυσικό τρόπο, ενθαρρύνοντας σας να σκέφτεστε με όρους απλούστερων συνιστωσών.

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

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

  • Τρέχουσα θέση, όπως αντιπροσωπεύεται από τις μεταβλητές Χ και y
  • Ταχύτητα και κατεύθυνση, όπως παρουσιάζονται από τις μεταβλητές dx και dy. Αυτές είναι μόνο τυχαία επιλεγμένες τιμές.
  • Πλάτος και ύψος, όπως παρουσιάζονται από τις μεταβλητές w και h
  • Μέγεθος γραμματοσειράς (περισσότερο σε αυτό σε λίγο)
  • Μια σημαία που υποδεικνύει αν η ράβδος αγγίζει το στόχο (σημαία είναι ο όρος προγραμματισμού για κάθε μεταβλητή που χρησιμοποιείται για να αντιπροσωπεύει μια συγκεκριμένη κατάσταση, όπως επί ή μακριά από)
  • Το τρέχον κείμενο του στόχου (δηλαδή "Καπέλο" ή "Κουνέλι")

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

  • βήμα(), που κάνει το στόχο να κινείται γύρω από τη σκηνή. Αυτό λειτουργεί προσθέτοντας το dx και dy στο Χ και y μεταβλητές.
  • χρώμα(), που τραβάει το στόχο στη σκηνή στο (Χ, y)
  • detectCollision (), η οποία καθορίζει αν η ράβδος έχει συγκρουστεί με τον στόχο
  • setBox (), το οποίο ενημερώνει τις μεταβλητές πλάτους και ύψους του στόχου με βάση το αν έχει αγγιχτεί από τη ραβδία
  • μεταβάλλω(), η οποία αλλάζει τη λέξη στόχου. (δηλαδή, εάν η τρέχουσα λέξη "Hat", τότε μεταβάλλω το κάνει "Κουνέλι", και αντίστροφα)
  • στη σκηνή(), το οποίο επιστρέφει μια σημαία που υποδεικνύει εάν ο στόχος έχει απομακρυνθεί από την περιοχή της ορατής οθόνης

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

Με αυτό το διάγραμμα, είναι πολύ εύκολο να γράψετε τον κώδικα detectCollision ():

// καθορίζει μια συγκεκριμένη συνάρτηση x, y βρίσκεται μέσα στο κουτί boolean detectCollision (float cx, cy float) {boolean retVal = false; αν ((cx> x) && (cx <(x + w)) && (cy> (y-h)) && (cy <y)) {retVal = } επιστροφή retVal; }}

Τέλος, το στη σκηνή() καθορίζει εάν ο στόχος βρίσκεται ακόμα στο ορατό στάδιο. Μόλις πετάξει έξω, ανακυκλώνεται τοποθετώντας το σε κάποιο νέο σημείο με νέα ταχύτητα και κατεύθυνση. Είναι παρήγορο να σημειωθεί ότι παρά τις πρόσθετες πολυπλοκότητες, το μεγαλύτερο μέρος αυτού του κωδικού είναι σχεδόν ίδιο με το Παράδειγμα 5-17: Τα όρια ενός ορθογωνίου στην αρχή της επεξεργασίας.

Arraylist στόχων

Τώρα που έχουμε περάσει από την κατηγορία Target, ας ρίξουμε μια ματιά στο πώς να το χρησιμοποιήσουμε. Όπως αναφέρθηκε εξαρχής, ο κύριος στόχος αυτού του παραδείγματος ήταν να δείξει πώς θα μπορούσατε να διαχειριστείτε δυναμικά πολλά αντικείμενα. Ενώ οι τυποποιημένες συστοιχίες (που αναφέρονται στο Κεφάλαιο 10 του "Ξεκινώντας με την Επεξεργασία") είναι τέλειες για πολλά πράγματα, δεν είναι πολύ δυναμικές γιατί αφού ορίσετε πόσα στοιχεία έχουν, είστε κολλημένοι με αυτό για πάντα.

Για παράδειγμα, ας υποθέσουμε ότι θέλετε να έχετε μια δέσμη στόχων, αλλά αντί να τις ανακυκλώσετε όπως κάναμε εδώ, απλά θέλετε να τις διαγράψετε. Σε έναν συνηθισμένο πίνακα, δεν μπορείτε να διαγράψετε στοιχεία. Εάν ξεκινήσατε με 5, έχετε πάντα 5, ανεξάρτητα από το τι. Έτσι, εάν θέλετε να "διαγράψετε" κάτι, πρέπει να έχετε κάποιο είδος αδέξιας λύσης. Ή, από την άλλη πλευρά, ας υποθέσουμε ότι είχατε ένα πρόγραμμα όπου συνήθως είχατε λίγα στοιχεία για να τα διαχειριστείτε, αλλά σε ορισμένες περιπτώσεις μπορεί να έχετε πολλές χιλιάδες. Χρησιμοποιώντας μια τυποποιημένη συστοιχία, θα πρέπει να δημιουργήσετε χώρο για χιλιάδες κάθε φορά, γεγονός που καταστρέφει τη μνήμη και μπορεί να κάνει τα σκίτσα σας πιο αργά.

Επεξεργασία ArrayList είναι ένας τρόπος γύρω από αυτούς τους περιορισμούς. Αντί να είναι απλός τύπος δεδομένων, όπως float ή int, ένα ArrayList είναι μια κλάση δομικού στοιχείου για τη διαχείριση άλλων αντικειμένων. Έχει μεθόδους για την προσθήκη νέων στοιχείων, τη διαγραφή ενός υπάρχοντος, την εύρεση του αριθμού των στοιχείων που βρίσκονται στη λίστα κ.ο.κ. Εκτός από το ότι είναι ένα πραγματικά χρήσιμο εργαλείο, η συνεργασία με το ArrayList θα σας εξοικειώσει με τις τεχνικές που θα χρησιμοποιήσετε σε άλλες πιο εξελιγμένες κατηγορίες, όπως το HashMaps (κάτι που θα διερευνήσουμε σε μελλοντικές αναρτήσεις). Γι 'αυτό, κάντε καρτέλα στο magic_words.pde και ας δούμε τον κώδικα.

Η δημιουργία ενός ArrayList είναι αρκετά απλή και γίνεται σε αυτή τη γραμμή. σημειώστε πως δεν πρέπει να δηλώσετε μέγεθος:

ArrayList στόχοι? // ένα ArrayList είναι ένας δυναμικός τρόπος διαχείρισης των συστοιχιών

Μόλις δηλωθεί, μπορούμε να αρχίσουμε να προσθέτουμε κάποια νέα αντικείμενα στο ArrayList, τα οποία κάνουμε με το προσθέτω() μέθοδος. Εδώ είναι το απόσπασμα του κώδικα στο setup () μέθοδος που προσθέτει τους αρχικούς στόχους:

στόχοι = νέο ArrayList (); // Δημιουργήστε μια νέα λίστα για το (int i = 0; i <N; i ++) {targets.add (νέο Target ("Καπέλο", "Κουνέλι"))? }}

Αυτό το απόσπασμα έχει μερικά ενδιαφέροντα σημεία. Πρώτον, δείχνει τη σύνταξη για την κλήση μιας μεθόδου, η οποία είναι object_variable.class μέθοδο (λίστα παραδειγμάτων). Δεύτερον, δείχνει πώς μπορείτε να χρησιμοποιήσετε ένα αντικείμενο ως ένα όρισμα στο ArrayList. Σημειώστε πώς χρησιμοποιούμε το νέος εντολή στη λίστα των παραδειγμάτων - που θα δημιουργήσει μια νέα μεταβλητή αντικειμένου Target και θα την μεταβιβάσει στη λίστα. Τέλος, το απόσπασμα δείχνει πώς μπορούμε να κάνουμε όλα αυτά μέσα σε ένα βρόχο. Θα μπορούσαμε να προσθέσουμε 10, 100 ή 10.000 αντικείμενα - το μέγεθος της λίστας είναι εντελώς δυναμικό.

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

για το (int i = 0; i <targets.size (); i ++) {Στόχος t = (Στόχος) targets.get (i); // Φέρτε τον i-th στόχο από το Array t.paint (); // Paint it // Ελέγξτε για συγκρούσεις αν (t.detectCollision (wandX, wandY)) {if (! T.inTarget) {t.toggle (); t.inTarget = true; }} αλλιώς {t.inTarget = false; } t.step (); // Προωθήστε την στην οθόνη // Αν ο τρέχων στόχος έχει απομακρυνθεί από τη σκηνή, διαγράψτε τον από τη λίστα και δημιουργήστε έναν νέο στόχο αν (! T.onStage ()) {targets.remove (i); targets.add (νέος στόχος ("Καπέλο", "Κουνέλι")). }}

Η πιο σημαντική γραμμή εδώ είναι η Στόχος t = (Στόχος) targets.get (i);. Πολλά πράγματα συμβαίνουν εδώ. Το πρώτο είναι ότι δημιουργούμε μια νέα μεταβλητή προορισμού που ονομάζεται t. Αυτή τη φορά, όμως, δεν χρησιμοποιούμε το νέος εντολή. Γιατί ρωτάς? Είναι επειδή το αντικείμενο που προσπαθούμε να έχουμε ήδη υπάρχει - δημιουργήθηκε νωρίτερα στο setup () μέθοδος. Το μόνο που κάνουμε εδώ είναι να το ανακτήσουμε. Δεύτερον, έχουμε αυτό το είδος παράξενης σύνταξης του (Στόχος). Αυτός είναι ο τρόπος που λέμε Επεξεργασία αυτού του τύπου μεταβλητής που αναμένουμε να ανακτήσουμε. Αυτό ονομάζεται "χύτευση", και απαιτεί λίγο περισσότερη εξήγηση.

Αν θυμάστε, το ArrayList είναι ένα γενικό εργαλείο - θα μπορούσαμε να το χρησιμοποιήσουμε με μια μεταβλητή Target, την κλάση Jitterbug που συζητήθηκε στο Κεφάλαιο 10 του Getting Started with Processing ή οποιαδήποτε άλλη μεταβλητή τάξης που μπορούμε να δημιουργήσουμε στο μέλλον. Ωστόσο, η επεξεργασία (και η Java, η υποκείμενη γλώσσα που βασίζεται) δεν μπορεί να αντιμετωπίσει το γενικό αντικείμενο. Απαιτεί να δώσουμε σε κάθε μεταβλητή έναν ακριβή τύπο όταν το δηλώνουμε. Προσθέτωντας (Στόχος) προς τα εμπρός του παίρνω() εντολή είναι αυτό που κάνει αυτό - λέμε Επεξεργασία "Hey, βγάζουμε ένα αντικείμενο" Target "." Θα δείτε αυτό που αναφέρεται ως χύσιμο σε άλλους πόρους προγραμματισμού.

Τέλος, έχουμε το στόχοι (i) μέρος της γραμμής. Αυτό λέει απλά "τραβήξτε το Εγώ'Το στοιχείο από τους στόχους ArrayList.

Μόλις ανακτήσουμε την μεταβλητή t, μπορούμε να καλέσουμε να διαβάσουμε τις μεταβλητές της, να καλέσουμε τις μεθόδους της και γενικά να κάνουμε την προσφορά μας. Σε αυτό το παράδειγμα, καλούμε πρώτα το χρώμα() για να σχεδιάσετε τον στόχο στην οθόνη. Έπειτα, ελέγξουμε να δούμε αν το ραβδί το αγγίζει (όπως θα θυμάστε από το τελευταίο Codebox, η θέση της ράβδου αντιπροσωπεύεται από τις μεταβλητές wandX και wandY). Εάν υπάρχει σύγκρουση, πρώτα ελέγξουμε αν το ραβδί ήταν ήδη μέσα στο στόχο. (Με άλλα λόγια, το ραβδί μπορεί να συγκρούστηκε με το αντικείμενο σε προηγούμενη επανάληψη του setup () και εξακολουθείτε να βρίσκεστε μέσα στο πλαίσιο προορισμού.) Εάν δεν είναι (δηλαδή, χτυπάει το κουτί προορισμού για πρώτη φορά), τότε θα αλλάξουμε το κείμενο και θα ρυθμίσουμε inTarget σημαία. Εάν η ράβδος είναι ήδη στο στόχο, απλά θέτουμε τη σημαία στόχου σε ψευδή, η οποία εμποδίζει τον στόχο από εναλλασσόμενη κατάσταση σε κάθε επανάληψη σχεδιάζω(). Η επόμενη εντολή, t.step (), απλά αυξάνει το στόχο Χ και y θέσεις. Τέλος, το τελευταίο αν έλεγχοι μπλοκ για να δείτε αν ο στόχος δεν είναι πλέον ορατός στη σκηνή. Αν δεν είναι (δηλαδή, έχει απομακρυνθεί από την ορατή περιοχή της οθόνης), τότε ο στόχος αφαιρείται από το ArrayList χρησιμοποιώντας το αφαιρώ() μέθοδος; ένας νέος στόχος προστίθεται στη συνέχεια σε κάποια τυχαία νέα θέση.

Μπά! Αυτά είναι πολλά αφηρημένα πράγματα, αλλά αξίζει να καταλάβετε γιατί θα χρησιμοποιήσετε αυτές τις τεχνικές ξανά και ξανά. Είτε χρησιμοποιείτε ένα ArrayList, ένα HashMap ή κάποια άλλη γενική δομή δεδομένων, κατανοώντας αυτά τα βασικά βήματα - δημιουργώντας ένα νέο αντικείμενο, αποθηκεύοντάς το σε μια γενική δομή δεδομένων και ανακτώντας το - είναι απαραίτητο για την παραγωγή πιο εξελιγμένων προγραμμάτων.

Στο επόμενο κιβώτιο κώδικα, θα κάνουμε ένα διάλειμμα από την κάμερα και θα διερευνήσουμε πώς μπορούμε να αποκτήσουμε πιο εξελιγμένες εισόδους από χρήστες χρησιμοποιώντας μια πραγματικά δροσερή βιβλιοθήκη που ονομάζεται controlP5. Ω, και fractals. Θα τα κάνουμε και αυτά.

Περισσότερα: Δείτε όλες τις στήλες του Κώδικα



Μπορεί Να Σας Ενδιαφέρει

Δημιουργία κοστούμι "Watcher" Dinosaur μακρά ρομπότ 13 ωρών από το ρολόι Dinosaur από το Zero Dawn του Horizon

Δημιουργία κοστούμι "Watcher" Dinosaur μακρά ρομπότ 13 ωρών από το ρολόι Dinosaur από το Zero Dawn του Horizon


Υψηλής τεχνολογίας μόδας, χαμηλού αναβάτες, και οτιδήποτε μεταξύ των κατασκευαστών Faire Kansas City

Υψηλής τεχνολογίας μόδας, χαμηλού αναβάτες, και οτιδήποτε μεταξύ των κατασκευαστών Faire Kansas City


Εργαλείο φούρνου με φούσκα που ελέγχεται από υπολογιστή

Εργαλείο φούρνου με φούσκα που ελέγχεται από υπολογιστή


Εθνική Εβδομάδα της Δημιουργίας: οι κατασκευαστές Shine Nation Wide

Εθνική Εβδομάδα της Δημιουργίας: οι κατασκευαστές Shine Nation Wide