Tip:
Highlight text to annotate it
X
>> DAVID MALAN: Ας γράψουμε ένα πρόγραμμα που περιλαμβάνει ένα παράθυρο και έναν κύκλο με
ο κύκλος γερός εμπρός και πίσω από το αριστερό και το δεξί
ακμές του εν λόγω παραθύρου.
Για να γίνει αυτό, ας χρησιμοποιήσουμε το Stanford Φορητό Βιβλιοθήκη, και ας το πρώτο
περιλαμβάνουν gevents.h ώστε να μπορούμε να ακούσουν για τις κινήσεις του ποντικιού.
Ας συνέχεια να συμπεριλάβει gobjects.h έτσι ώστε μπορούμε να δηλώσουμε τα πράγματα όπως οβάλ ή
κύκλους, πραγματικά.
Και τότε ας περιλαμβάνουν gwindow.h έτσι ώστε έχουμε ένα γραφικό παράθυρο για την
τα πάντα.
>> Ας κηρύξει τον συνήθη τρόπο.
Και ας πάμε τώρα δηλώνουν και υπόσταση ή να δημιουργήσετε αυτό το παράθυρο, GWindow -
και θα καλέσουμε το μεταβλητό παράθυρο -
παίρνει newGWindow.
Και θα το κάνει αυθαίρετα 320 pixels από 240 pixels.
>> Ας επόμενη υπόσταση έναν κύκλο.
Αλλά για την υπόσταση αυτού του κύκλου, πρέπει να κάνουμε λίγο περισσότερη δουλειά.
Ειδικότερα, ας συμπληρώσουμε σε αυτόν τον κύκλο έτσι ώστε το όλο πράγμα είναι
μαύρο και όχι μόνο το περίγραμμα αυτής.
Goval -
θα το ονομάσουμε κύκλο -
παίρνει newGOval.
Θα θέσει αυτό το οβάλ σε 0, 110, και θα κάνουν τις οβάλ 20 pixels πλάτος
20 pixels ύψος - με άλλα λόγια, μια διαμέτρου 20 ή μια ακτίνα 10.
>> Ας ορίσουμε τώρα το χρώμα του κύκλου αυτού να είναι απόσπασμα, unquote, «μαύρο». Ας
τώρα που θα πρέπει να πληρωθεί καθορίζοντας αλήθεια.
Και τώρα, τέλος, ας προσθέσουμε τον κύκλο το παράθυρο ως ακολούθως, με την οποία ο
τελευταίο προστίθεται στο πρώτο.
>> Ας τώρα να δηλώσει ένα διπλό.
Θα το ονομάσουμε ταχύτητα.
Και κάπως αυθαίρετα, ας πούμε το ταχύτητα αυτού του κύκλου θα είναι
2.0, με άλλα λόγια, 2 pixels για κάθε μονάδα του χρόνου.
Και τώρα ας σκόπιμα προκαλέσει ένα άπειρο βρόχο.
>> Έτσι, πώς να κάνει αυτόν τον κύκλο αναπηδήσει πίσω και εμπρός;
Λοιπόν ας υποθέσουμε σε αυτό το βρόχο που για κάθε μονάδα του χρόνου, είμαστε
πρόκειται να μετακινηθούν στον κύκλο λίγο bit με βάση την ταχύτητα του 2 pixels
ανά μονάδα χρόνου.
Αλλά συνεχώς, θα πάμε να πρέπει να ελέγξτε αν ο κύκλος αγγίζουν το
δεξιά άκρη της οθόνης ή το αριστερό άκρη της οθόνης, γιατί αν ναι, εμείς
Πρέπει να σπάσουμε, να το πω έτσι.
>> Πώς να εφαρμόσει το έννοια της γερός;
Λοιπόν, αν θα πάμε σε 2 pixels με το το δικαίωμα ανά μονάδα χρόνου, για να αναπηδήσει
το δεξί άκρο, μπορούμε απλά να αντιστρέψει ότι για να είναι αρνητική 2 pixels ανά μονάδα
του χρόνου, αναιρώντας έτσι η ταχύτητα.
Έτσι, στην πραγματικότητα, η αναπήδηση είναι σχετικά απλό.
>> Ας πρώτα να μετακινήσετε τον κύκλο από αυτόν πολλά εικονοστοιχεία κατά μήκος του άξονα χ, από την παρούσα
πολλά εικονοστοιχεία κατά μήκος του Υ-άξονα.
Με άλλα λόγια, δεν θέλουμε να κινείται κατά μήκος του άξονα y καθόλου.
Εμείς το μόνο που θέλουν είναι να αναπηδήσει πίσω και πίσω αριστερά και δεξιά.
>> Και τώρα ας ελέγξει εντός αυτού του βρόγχου σε περίπτωση η x-συντεταγμένη του κύκλου συν
το πλάτος του κύκλου είναι μεγαλύτερη από ή ίση με το
πλάτος του παραθύρου -
Με άλλα λόγια, αν η θέση του κύκλου συν το πλάτος του κύκλου
η ίδια είναι τώρα πέρα από την άκρη του παραθύρου, είχαμε
καλύτερα αντίστροφη ταχύτητα μας -
ταχύτητα παίρνει αρνητική ταχύτητα, με αποτέλεσμα να ρίχνεις ένα θετικό αποτέλεσμα σε μια
αρνητική ή ένα αρνητικό σε θετικό.
Αλλά τι θα γινόταν αν ο κύκλος κινείται από δεξιά προς τα αριστερά και ως εκ τούτου χτυπά
το αριστερό άκρο;
Με άλλα λόγια, αν η χ-συντεταγμένη της ο κύκλος είναι τώρα λιγότερο από ή ίσο
σε 0, ας προχωρήσουμε και πάλι αντιστρέψτε την ταχύτητα μας.
>> Γιατί, λοιπόν, δεν έχω προστίθενται στο δυναμικό της πλάτος του κύκλου παρούσας
φορά, όπως έκανα πριν;
Λοιπόν, έχετε κατά νου ότι οι συντεταγμένες ενός αντικειμένου ορίζονται
από πάνω αριστερή γωνία του, όχι από την μέση του.
Και έτσι, όταν ο κύκλος κινείται από αριστερά προς τα δεξιά, πρέπει να ελέγξουμε
αν η δεξιά άκρη του κύκλος έχει περάσει το
δεξιά άκρη του παραθύρου.
Έτσι για να καταλάβω τι είναι αυτό, έχουμε να πάρει το x-συντεταγμένη του κύκλου
συν το πλάτος του κύκλου να κινηθεί τους εαυτούς μας από την κορυφή αριστερά
γωνία, αποτελεσματικά, με την πάνω δεξιά γωνία.
Όταν ο κύκλος κινείται από δεξιά προς αριστερά, εν τω μεταξύ, δεν χρειάζεται να
ασχοληθείτε με αυτήν την προσθήκη, επειδή η επάνω αριστερή γωνία του κύκλου είναι
ήδη η τιμή θα πάρετε από get x.
>> Ας τώρα να μετακινήσετε την μπάλα.
Ας σώσει τώρα, μεταγλώττιση, και να τρέξει αυτό πρόγραμμα, κάνει αναπήδηση,. / αναπήδηση.
Και εκεί έχουμε ένα πρόγραμμα.
>> Αλλά ο κύκλος κινείται έτσι καταριέται γρήγορα, είναι σχεδόν αδύνατο να δούμε τι είναι
πραγματικά συμβαίνει.
Οπότε ας το πρόγραμμα αρκετά βίαια από κάνοντας κλικ στο X στην επάνω δεξιά
γωνία εδώ.
Ας πάμε τώρα πίσω στο πηγαίο κώδικα και επιβραδύνει τα πράγματα κάτω λίγο.
>> Με άλλα λόγια, σε αυτό το άπειρο βρόχο, και όχι μόνο και κίνηση και
κυκλοφορούν και πάλι, nauseum τώρα, ας σταθώ για λίγα χιλιοστά του δευτερολέπτου
πριν προχωρήσετε να κινηθεί και πάλι.
Ειδικότερα, ας πηγαίνετε προς τα κάτω του ατέρμονα βρόχο εδώ και απλά
παύση για, ας πούμε, 10 χιλιοστά του δευτερολέπτου σε κάθε επανάληψη.
Ας τώρα να μεταγλωττίσετε και να επαναληφθεί η αναπήδηση.
Και τώρα βλέπουμε μια πολύ πιο λογικό εφαρμογή, όπου μπορούμε να δούμε το
κύκλο πραγματικά γερός σχετικά με την αριστερά και δεξιά άκρη.