Ενδιαφέρουσες κατευθυντήριες γραμμές προγραμματισμού για Σχεδιαστής-Προβάλετε την εικόνα σας (Μέρος Πρώτο): 16 Βήματα
Ενδιαφέρουσες κατευθυντήριες γραμμές προγραμματισμού για Σχεδιαστής-Προβάλετε την εικόνα σας (Μέρος Πρώτο): 16 Βήματα

Βίντεο: Ενδιαφέρουσες κατευθυντήριες γραμμές προγραμματισμού για Σχεδιαστής-Προβάλετε την εικόνα σας (Μέρος Πρώτο): 16 Βήματα

Βίντεο: Ενδιαφέρουσες κατευθυντήριες γραμμές προγραμματισμού για Σχεδιαστής-Προβάλετε την εικόνα σας (Μέρος Πρώτο): 16 Βήματα
Βίντεο: Πώς να κάνεις καλά πράγματα να σου συμβούν. Ακουστικό βιβλίο 2025, Ιανουάριος
Anonim

Τρέξιμο! Τρέξιμο! Τρέξιμο!

Ο προγραμματισμός δεν είναι τόσο δύσκολος. Το βασικό σημείο είναι να βρείτε τον ρυθμό σας και να το κάνετε ένα προς ένα.

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

Δεδομένου ότι θέλουμε να κάνουμε κινούμενα γραφικά, πρέπει να γνωρίζουμε πώς παράγεται το κινούμενο σχέδιο.

Η παραπάνω εικόνα φαίνεται αρκετά ελκυστική και φανερώνει οπτικά την αρχή εφαρμογής του κινούμενου σχεδίου.

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

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

Βήμα 1: Μεταβλητή

Μεταβλητή είναι ο περιέκτης δεδομένων. Μπορεί να χρησιμοποιηθεί επανειλημμένα μέσα σε ένα πρόγραμμα.

Για παράδειγμα:

[cceN_cpp theme = "dawn"] μέγεθος (500, 500); έλλειψη (100, 250, 50, 50); έλλειψη (200, 250, 50, 50); έλλειψη (300, 250, 50, 50); έλλειψη (400, 250, 50, 50);

[/cceN_cpp]

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

Ακολουθεί ο κώδικας μετά την προσθήκη μεταβλητής:

[cceN_cpp theme = "dawn"] μέγεθος (500, 500); int a = 50; έλλειψη (100, 250, a, a); έλλειψη (200, 250, a, a); έλλειψη (300, 250, a, a); έλλειψη (400, 250, a, a);

[/cceN_cpp]

Παίρνουμε το ίδιο αποτέλεσμα!

Δεδομένου ότι έχουμε ορίσει τη μεταβλητή α, μπορούμε εύκολα να αλλάξουμε παραμέτρους. Αν αλλάξουμε a = 50 σε a = 100, τότε το πλάτος και το ύψος όλων των κύκλων θα γίνουν 100 ομοιόμορφα. Δεν χρειάζεται λοιπόν να αλλάζουμε τις παραμέτρους μία προς μία. Η μεταβλητή είναι πραγματικά μια καλή εφεύρεση.

Βήμα 2: Η δημιουργία μεταβλητής

Πριν χρησιμοποιήσουμε τη μεταβλητή, πρέπει να κάνουμε μια δήλωση και να ορίσουμε τον τύπο δεδομένων της.

int i?

i = 50?

Η πρώτη πρόταση του κώδικα έχει κάνει μια δήλωση για μια μεταβλητή i. int είναι ένα σύμβολο που χρησιμοποιείται κυρίως για να δηλώσει μεταβλητή. Κατά τη δήλωση, θα αποθηκεύσει ένα χώρο στη μνήμη του υπολογιστή, το οποίο ισοδυναμεί με τη δημιουργία ενός "κουτιού", που χρησιμοποιείται ειδικά για την επαναφορά ακέραιων δεδομένων. Η δεύτερη πρόταση σημαίνει ότι η εργασία 50 πρέπει να υλοποιηθεί από τη μεταβλητή i. Μετά την εφαρμογή αυτής της πρότασης, τα δεδομένα θα αποθηκευτούν σταθερά στη μεταβλητή i. Or μπορείτε να είστε πιο τεμπέλης για να συνδυάσετε τις δύο παραπάνω προτάσεις σε μία και πλήρη εργασία ενώ κάνετε δήλωση.

int i = 50;

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

Βήμα 3: Κανονισμός ονομασίας μεταβλητής

• Πρέπει να είναι ο συνδυασμός αλφαβήτου και υπογράμμισης. Μπορεί να είναι σύμβολο ή λέξη.

• Με διάκριση πεζών -κεφαλαίων. Όνομα και όνομα μπορεί να αντιπροσωπεύουν διαφορετικές μεταβλητές.

• Προσπαθήστε να το ονομάσετε όσο το δυνατόν πιο εύκολο για να σας επιτρέψει να το καταλάβετε με μια ματιά. Ο αρχικός χαρακτήρας πρέπει να είναι αλφάβητο αντί αριθμού ή ειδικού χαρακτήρα.

• Δεν υπάρχουν λέξεις κλειδιά όπως int, float

Τα παρακάτω είναι μερικές λανθασμένες δηλώσεις.

int $ a?

int 89b;

Ακολουθούν οι σωστές δηλώσεις:

int r?

int super_24;

int openTheDoor;

Βήμα 4: Τύπος μεταβλητής

Εκτός από τη δήλωση ακέραιων δεδομένων, μπορούμε να δηλώσουμε για δεκαδικά δεδομένα (που ονομάζονται επίσης δεδομένα κινητής υποδιαστολής) με λέξη -κλειδί float.

float b = 0,5

Πρέπει να έχουμε κατά νου τι είδους δεδομένα χρησιμοποιήσαμε για τη δήλωσή μας. Εάν έχουμε χρησιμοποιήσει τη λέξη κλειδί int, η τελευταία ανάθεση δεν μπορεί να γράψει i = 0.5 ή κάτι τέτοιο, ή το πρόγραμμα θα γίνει λάθος. Αλλά αν γράφουμε αντίθετα, είναι εντάξει. Για παράδειγμα, το float i = 5 είναι η σωστή γραμματική, αλλά το πρόγραμμα θα το αναγνωρίσει ως δεκαδικό αριθμό.

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

Βήμα 5: Χειριστής

Οι ακόλουθοι είναι φορείς επεξεργασίας:

+ συν

- μείον

* πολλαπλασιάστε

διαιρέστε

% Συντελεστής υπολοίπου

Πρέπει να είστε εξοικειωμένοι με όλους αυτούς τους τελεστές εκτός από το %. Φαίνεται αρκετά περίεργο γιατί το αποτέλεσμα είναι υπόλοιπο. Το 9%3 είναι 0. Ενώ το 9%5 είναι 4.

Οι τελεστές μπορούν να χρησιμοποιηθούν μεταξύ αναθέσεων και μεταβλητών.

[cceN_cpp theme = "dawn"] int a = 1; // δηλώνω ακέραια μεταβλητή α, η εκχώρηση είναι 1. int b = 2; // Δηλώστε ακέραια μεταβλητή b, η εκχώρηση είναι 2. int c; // Δηλώστε ακέραια μεταβλητή γ. c = a + b; // Συν δύο ανάθεση και εκχωρήστε το αποτέλεσμα της στο c. εκτύπωση (γ)? // Μεταβλητή εξόδου γ.

[/cceN_cpp]

Βήμα 6: Αποτέλεσμα λειτουργίας:

Το αποτέλεσμα εξόδου δεν θα εμφανίζεται στο παράθυρο αλλά στην κονσόλα στο κάτω μέρος.

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

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

Βήμα 7: Κανονισμός λειτουργίας

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

εκτύπωση (6 /5); // αποτέλεσμα 1

Η λειτουργία μεταξύ ακεραίων θα έχει νέο ακέραιο. 6 διαιρούμενο με 5 είναι 1,2. Αλλά το αποτέλεσμα εξόδου του προγράμματος είναι 1. Αυτό είναι αντίθετο με τη διαίσθησή μας. Το πρόγραμμα δεν θα ασχοληθεί με το γύρο αλλά θα διαγράψει τον αριθμό πίσω από την υποδιαστολή.

εκτύπωση (6.0 / 5.0); // αποτέλεσμα 1.2

Η λειτουργία μεταξύ των κυμαινόμενων σημείων θα έχει ως αποτέλεσμα έναν νέο αριθμό κυμαινόμενου σημείου. Εάν το πραγματικό αποτέλεσμα είναι 1,2, το αποτέλεσμα εξόδου προγράμματος θα είναι το ίδιο.

εκτύπωση (6 / 5.0); // αποτέλεσμα 1.2

εκτύπωση (6.0 / 5); // αποτέλεσμα 1.2

Τέλος, είναι το μείγμα ακέραιου και αριθμού κυμαινόμενου σημείου. Το τελικό αποτέλεσμα εξόδου θα είναι 1,2.

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

Βήμα 8: Λειτουργία εγκατάστασης & συνάρτησης σχεδίασης

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

void setup () {

}

άκυρη κλήρωση () {

}

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

[cceN_cpp theme = "dawn"] void setup () {print (1); } void draw () {print (2); } [/cceN_cpp]

Ας ρίξουμε μια ματιά σε ένα παράδειγμα:

Όταν πατάτε το κουμπί λειτουργίας, η κονσόλα θα βγάλει πρώτα "1" και μετά θα βγάζει συνεχώς "2" μέχρι να πατήσετε το κουμπί διακοπής ή να κλείσετε το παράθυρο.

Ο κώδικας εντός παρενθέσεων στη λειτουργία εγκατάστασης θα εφαρμοστεί μόνο μία φορά. Ενώ ο κώδικας εντός της κλήρωσης συνάρτησης θα εκτελείται συνεχώς σε κυκλοφορία (προεπιλεγμένη εφαρμογή 60 φορές/δευτερόλεπτο).

Λόγω αυτού του χαρακτήρα, η εγκατάσταση χρησιμοποιείται συνήθως για την προετοιμασία ιδιοτήτων περιβάλλοντος, όπως το πλάτος και το ύψος της οθόνης, το χρώμα φόντου και κάθε είδους εκχώρηση μεταβλητών. Ενώ συχνά τοποθετούμε τις συναρτήσεις σχεδίασης στο draw function για να δημιουργούμε συνεχώς μεταβαλλόμενα γραφικά.

Βήμα 9: Κύκλος στην οριζόντια κίνηση

Με τη λειτουργία draw, μπορούμε να ξεκινήσουμε να δημιουργούμε τις κινούμενες εικόνες μας. Η μέθοδος γραφής εφέ κινούμενων εικόνων με επεξεργασία είναι αρκετά «αμήχανη». Δεν έχει καμία υπάρχουσα εντολή. Για παράδειγμα, ορίστε ένα συγκεκριμένο σχήμα για να κάνετε καμπυλόγραμμο.

Αυτές τις λεπτομέρειες πρέπει να τις ορίσουμε μόνοι μας. Πρέπει να πείτε στο πρόγραμμα τι είδους γραφικά χρειάζονται σίγουρα κάθε καρέ.

Γράψτε τον ακόλουθο κώδικα σε αυτό (Τώρα ας ξεκινήσουμε να το κάνουμε με τα χέρια):

[cceN_cpp theme = "dawn"] int x; int y? void setup () {μέγεθος (300, 300); x = 0; y = ύψος/2; } void draw () {background (234, 113, 107); noStroke (); έλλειψη (x, y, 50, 50); x = x+1; }

[/cceN_cpp]

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

x = x + 1

Μην το βλέπετε ως μαθηματική εξίσωση, αλλιώς θα είναι πολύ περίεργο. Εδώ, το "" είναι ένα σύμβολο για την ανάθεση. Αντιπροσωπεύει την τοποθέτηση των δεξιών αριθμών στην αριστερή μεταβλητή. Ας υποθέσουμε ότι το x είναι 50, μόλις ξεκινήσει ο κώδικας, η δεξιά πλευρά του "" ισούται με 50+1, δηλαδή 51. Το τελικό αποτέλεσμα θα αντιστοιχιστεί στη μεταβλητή x. Άρα η τιμή του x γίνεται 51.

Ακολουθήστε τη διαδικασία του προγράμματος, κάθε φορά που η κλήρωση συνάρτησης λειτουργεί για μία φορά, η τιμή του x αυξάνεται 1. Έτσι, κάθε φορά που σχεδιάζουμε, ο κύκλος θα μετακινεί μια κατεύθυνση pixel οριζόντια προς τα δεξιά, σε σύγκριση με το προηγούμενο πλαίσιο. Επομένως, το γραφικό γίνεται κινούμενο.

• Προκειμένου ο κώδικας να αποκτήσει καλύτερη αναγνωσιμότητα, πρέπει να διαθέσουμε ένα συγκεκριμένο χώρο πριν από κάθε γραμμή κώδικα μέσα σε σιδεράκια. Και θα είναι όσο το δυνατόν ευθυγραμμισμένη. Πατήστε TAB ή αρκετό κενό χώρο, μπορεί να αποσυρθεί.

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

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

κύκλος = κύκλος +1

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

κύκλος

Δεν είναι πολύ απλό; Σημαίνει αύξηση 1 αυτόματα. Παρόμοια με αυτό, υπάρχει - -, που σημαίνει μείωση 1 αυτόματα.

Αλλά αν ελπίζουμε ότι η ποσότητα της αυτόματης αύξησης είναι άλλος αριθμός όπως 2, πρέπει να δοκιμάσουμε μια άλλη έκφραση.

κύκλος += 2

Αυτό ισούται με

κύκλος = κύκλος + 2

Ομοίως, υπάρχει - =, /=, *=.

Βήμα 10: Κατεύθυνση κίνησης

Σε ποια κατεύθυνση κινείται το γραφικό εξαρτάται από το πώς αλλάζετε τη συντεταγμένη σας. Αν αλλάξει σε y = y + 1, ο κύκλος θα κινηθεί προς τα κάτω. Εάν και το x και το y αυξάνουν 1, ο κύκλος θα μετακινηθεί προς τα κάτω στο δεξί κάτω μέρος. Αν το γράψουμε τι είναι ένα σύμβολο μείον, θα κινηθεί προς την αντίθετη κατεύθυνση.

[cceN_cpp theme = "dawn"] int x, y; // Μπορεί να δηλώσει ταυτόχρονα πολλαπλές μεταβλητές, χρησιμοποιήστε κόμμα για διαχωρισμό. void setup () {μέγεθος (300, 300); x = 0; y = 0; } void draw () {background (234, 113, 107); noStroke (); έλλειψη (x, y, 50, 50); x ++; y ++; }

[/cceN_cpp]

Ποσοστό κίνησης

Θυμάστε τα προεπιλεγμένα 60 καρέ ανά δευτερόλεπτο μέσα στην κλήρωση συνάρτησης; Σύμφωνα με αυτόν τον ρυθμό, ο παραπάνω κύκλος θα μετακινηθεί 60 pixel ανά δευτερόλεπτο προς τα δεξιά.

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

x = x + 10

Έχει βελτιώσει την ταχύτητα για 10 φορές σε σύγκριση με την αρχική!

Η άλλη μέθοδος είναι να αλλάξετε τη συχνότητα ανανέωσης του καμβά. frameRate ()

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

Βήμα 11: Παραβλεπόμενο υπόβαθρο

Όλα τα προηγούμενα παραδείγματα γράφουν φόντο σε λειτουργία συνάρτησης. Έχετε σκεφτεί ποτέ να το γράψετε στη λειτουργία ρύθμισης; Θα έχει διαφορές; Τώρα, ας ενημερώσουμε το παράδειγμα της οριζόντιας κίνησης.

[cceN_cpp theme = "dawn"] int x, y; void setup () {μέγεθος (300, 300); φόντο (234, 113, 107); x = 0; y = ύψος/2; } void draw () {noStroke (); έλλειψη (x, y, 50, 50); x += 1; } [/cceN_cpp]

Τι συνέβη? Maybeσως δεν μπορεί να καταλάβει σωστά τον λόγο παραγωγής του προβλήματος. Διαγράψτε τη λειτουργία noStroke, προσθέστε ξανά εγκεφαλικό επεισόδιο και δείτε τη διαδρομή κίνησης του κύκλου.

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

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

[cceN_cpp theme = "dawn"] void setup () {size (400, 400); } void draw () {ellipse (width/2-mouseX, height/2-mouseX, mouseY, mouseY); έλλειψη (πλάτος/2-mouseX, ύψος/2+mouseX, mouseY, mouseY); έλλειψη (πλάτος/2+ποντίκιΧ, ύψος/2-ποντίκιΧ, ποντίκι, ποντίκι); έλλειψη (πλάτος/2+mouseX, ύψος/2+mouseX, mouseY, mouseY); } [/cceN_cpp]

Εδώ έχουμε χρησιμοποιήσει τη μαγική μεταβλητή mouseX και mouseY. Αργότερα θα μιλήσουμε γι 'αυτό λεπτομερώς.

Βήμα 12: Ανακίνηση κύκλου

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

Μορφή πρόσκλησης:

τυχαίο (υψηλό)

Το High αντιπροσωπεύει το τυχαίο ανώτερο όριο και το προεπιλεγμένο κατώτατο όριο είναι 0. Για παράδειγμα, τυχαίο (10). Θα παράγει έναν αριθμό από 0 έως 10 τυχαία (το 0 περιλαμβάνεται αλλά το 10 δεν περιλαμβάνεται).

τυχαίο (χαμηλό, υψηλό)

Εάν ορίσουμε δύο παραμέτρους, τότε θα επιστρέψει στην τυχαία τιμή μεταξύ τους. Για παράδειγμα, τυχαία (5, 10). Θα παράγει έναν αριθμό από 5 έως 10 τυχαία (5 περιλαμβάνονται αλλά 10 δεν περιλαμβάνονται).

Παράδειγμα:

[cceN_cpp theme = "dawn"] float x;

x = τυχαίο (50, 100);

εκτύπωση (x); [/cceN_cpp]

Κάθε φορά που τρέχουμε το πρόγραμμα, η κονσόλα θα βγάζει διαφορετικές τιμές.

• Σημείωση: Οι τιμές που δημιουργούνται από τυχαία συνάρτηση ανήκουν στον τύπο κυμαινόμενου σημείου (τύπος δεκαδικού αριθμού). Εάν θέλουμε να εκχωρήσουμε μια τιμή σε ακέραια μεταβλητή, πρέπει να τη μετατρέψουμε μέσω της συνάρτησης int (). Ο μετασχηματισμός δεν τηρεί τον γύρο αλλά διαγράφει το δεκαδικό μέρος απευθείας. Έτσι, η έξοδος του int (τυχαία (5)), έχει μόνο 5 δυνατότητες: 0, 1, 2, 3, 4.

Αφού εξοικειωθούμε με τη χρήση της τυχαίας συνάρτησης, μπορούμε να έρθουμε απευθείας στην παρακάτω περίπτωση.

[cceN_cpp theme = "dawn"] int x, y; void setup () {μέγεθος (300, 300); x = πλάτος/2; y = ύψος/2; } void draw () {background (234, 113, 107); noStroke (); x += int (τυχαία (-5, 5)); y += int (τυχαία (-5, 5)); έλλειψη (x, y, 50, 50); }

[/cceN_cpp]

Οι πρώτες προστιθέμενες τιμές συντεταγμένων είναι σταθερές. Μόνο αν αυξήσουμε μια τυχαία τιμή, ο κύκλος θα κινηθεί προς αόριστη κατεύθυνση. Με το μεγαλύτερο τυχαίο εύρος, κουνιέται πιο συχνά. Δεδομένου ότι η αλλαγή τιμής μεταξύ των πλαισίων αναπηδήσει, η κίνηση δεν θα είναι πλέον ομαλή. Ενώ το πρώτο πλαίσιο είναι (150, 150), το τελευταίο πλαίσιο θα μετακινηθεί στη θέση (170, 170) με μια ματιά.

Βήμα 13: Κύκλος μετεγκατάστασης

Κύκλος μετανάστευσης

Θα δημιουργήσει ομαλή κίνηση; Ο θόρυβος λειτουργίας μπορεί να μας βοηθήσει. Έχει καλύτερο ρυθμό από το τυπικό τυχαίο. Και οι τυχαία δημιουργούμενοι τυχαίοι αριθμοί είναι συνεχώς.

Μορφή πρόσκλησης:

θόρυβος (t

Ο θόρυβος λειτουργίας δεν μπορεί να καθορίσει το εύρος εξόδου του. Το πρόγραμμα ορίζει ότι μπορεί να δημιουργήσει μόνο αριθμούς κυμαινόμενου σημείου από 0 έως 1 και η σταθερή είσοδος μπορεί να έχει μόνο σταθερή έξοδο.

[cceN_cpp theme = "dawn"] float x = θόρυβος (5); float y = θόρυβος (5); εκτύπωση (x, y); [/cceN_cpp]

Επειδή οι παραπάνω παράμετροι εισόδου είναι 5, άρα τα αποτελέσματα εξόδου είναι τα ίδια. Τότε πώς να αλλάξετε το αποτέλεσμα; Η απάντηση είναι να αλλάξετε δυναμικά τις παραμέτρους εισόδου. Στην πραγματικότητα μπορούμε να θεωρήσουμε τον θόρυβο ως ένα απεριόριστο κομμάτι φωνής, οι παράμετροι εισόδου είναι ακριβώς όπως "η παρούσα στιγμή". Εάν η είσοδος παραμέτρων είναι συνεχής, η έξοδος θα είναι επίσης συνεχής.

[cceN_cpp theme = "dawn"] float x, y; void setup () {μέγεθος (700, 100); x = 0; φόντο (0); } void draw () {x += 1; y = θόρυβος (frameCount/100.0)*100; noStroke (); έλλειψη (x, y, 2, 2); }

[/cceN_cpp]

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

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

• Το frameCount είναι ακέραιος μεταβλητός. Διαιρούμενο με μια άλλη ακέραια μεταβλητή, το πρόγραμμα θα προεπιλέξει να επεξεργάζεται το αποτέλεσμα ως ακέραιο. Για να βελτιώσουμε την ακρίβεια του αποτελέσματος, πρέπει να αλλάξουμε το 100 σε 100,0. Διαιρούμενο με έναν αριθμό κυμαινόμενου σημείου, θα έχουμε επίσης έναν αριθμό κυμαινόμενου σημείου.

• Για να αλλάξουμε τον άξονα Υ από 0 σε 100, πρέπει να πολλαπλασιάσουμε το αποτέλεσμα του θορύβου επί 100. Έτσι μπορούμε να ελέγξουμε το εύρος της τυχαίας τιμής.

Μερικοί από εσάς που είστε καλοί στη σκέψη μπορεί να ρωτήσουν "γιατί πρέπει να διαιρέσουμε το frameCountby 100; Δεν είναι εντάξει να γράφουμε απευθείας το frameCount;" Φυσικά μπορείτε να! Αλλά εδώ, για να εμφανίσουμε καλύτερα τα χαρακτηριστικά του θορύβου λειτουργίας, επιβραδύνουμε τον "ρυθμό μετάδοσης". Το παρακάτω παράδειγμα δείχνει την τιμή εξόδου να αλλάζει με διαφορετικό ρυθμό μεταβολής.

[cceN_cpp theme = "dawn"] float x, y1, y2, y3, y4, y5; void setup () {μέγεθος (700, 500); x = 0; φόντο (0); } void draw () {x += 1; y1 = θόρυβος (frameCount)*100; y2 = θόρυβος (frameCount/10.0)*100; y3 = θόρυβος (frameCount/100.0)*100; y4 = θόρυβος (frameCount/1000.0)*100; y5 = θόρυβος (frameCount/10000.0)*100; noStroke (); έλλειψη (x, y1, 2, 2); έλλειψη (x, y2+100, 2, 2); έλλειψη (x, y3+200, 2, 2); έλλειψη (x, y4+300, 2, 2); έλλειψη (x, y5+400, 2, 2); εγκεφαλικό επεισόδιο (80). γραμμή (0, 100, πλάτος, 100). γραμμή (0, 200, πλάτος, 200). γραμμή (0, 300, πλάτος, 300). γραμμή (0, 400, πλάτος, 400). }

[/cceN_cpp]

Μπορείτε να θεωρήσετε τις μεταβαλλόμενες παραμέτρους στο θόρυβο λειτουργίας ως γραμμή προόδου. Η αλλαγή της παραμέτρου είναι σαν να μετακινούμε τη γραμμή προόδου. Έτσι, όταν το μεταβαλλόμενο εύρος αυτού του "φωνητικού κομματιού" είναι μεγαλύτερο, τα εμπρός και πίσω συνεχόμενα χαρακτηριστικά της τιμής εξόδου θα είναι ασθενέστερα. (Μπορούμε να φανταστούμε τι θα συμβεί αν μεταδώσουμε ένα κομμάτι μουσικής ή ένα βίντεο με 2 φορές ταχύτητα, 5 φορές ταχύτητα, 20 φορές ταχύτητα). Όταν το εύρος είναι μεγαλύτερο από μια ορισμένη τιμή, τότε δεν έχει μεγάλη διαφορά να λειτουργεί τυχαία κατά την παραγωγή τιμής.

Εάν μπορείτε να κατανοήσετε όλα τα παραδείγματα παραπάνω, τότε θα αισθανθείτε ότι τίποτα δεν μπορεί να είναι πιο εύκολο να σχεδιάσετε έναν μετακινούμενο κύκλο. Μπορείτε επίσης να κατανοήσετε τις εσωτερικές αρχές.

[cceN_cpp theme = "dawn"] float x, y; void setup () {μέγεθος (300, 300); x = 0; } void draw () {background (234, 113, 107); x = θόρυβος (frameCount/100.0 + 100)*300; y = θόρυβος (frameCount/100.0)*300; noStroke (); έλλειψη (x, y, 50, 50); }

[/cceN_cpp]

Τώρα, η κίνηση είναι πιο ενδιαφέρουσα όπως ένας περιστρεφόμενος γύρο.

• Ο λόγος για τον οποίο η μεταβλητή x εντός θορύβου συνάρτησης πρέπει να είναι συν 100 είναι επειδή για να τις διαχωρίσουμε για μια απόσταση. Εάν οι παράμετροι του xy εντός του θορύβου συνάρτησης είναι οι ίδιες ή αρκετά κοντά, η αλλαγή της συντεταγμένης x, y θα κλείσει στο ίδιο. Αυτό γίνεται για να γίνει η κίνηση πολύ πιο τυχαία.

Βήμα 14: Κύκλος μετακινήθηκε από το ποντίκι

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

Η υπόθεση είναι πολύ απλή:

[cceN_cpp theme = "dawn"] int x, y; void setup () {μέγεθος (300, 300); x = 0; y = 0; } void draw () {background (234, 113, 107); noStroke (); x = ποντίκιX; y = ποντίκιY; έλλειψη (x, y, 50, 50); }

[/cceN_cpp]

Το mouseX μπορεί να αποκτήσει συντεταγμένη x του ποντικιού, ενώ το mouseY μπορεί να λάβει συντεταγμένη y.

• Ας προσπαθήσουμε να αλλάξουμε θετικό και αρνητικό σύμβολο ή να ανταλλάξουμε mouseX και mouseY.

Βήμα 15: Τέλος

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

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

Αυτό το άρθρο προέρχεται από τον σχεδιαστή Wenzy.

Βήμα 16: Σχετικές αναγνώσεις:

Ενδιαφέρουσες οδηγίες προγραμματισμού για σχεδιαστή-Επεξεργασία αρχικού αγγίγματος

Ενδιαφέρουσες οδηγίες προγραμματισμού για σχεδιαστές-Δημιουργήστε το πρώτο σας πρόγραμμα επεξεργασίας

Αυτό το άρθρο προέρχεται από:

Εάν χρειάζεστε βοήθεια, μπορείτε να επικοινωνήσετε στη διεύθυνση: [email protected].