Tip:
Highlight text to annotate it
X
>> DAVID Malan: Écrivons un programme comportant une fenêtre et un cercle avec
le cercle de rebondir et-vient au large de la gauche et la droite
les bords de cette fenêtre.
Pour ce faire, nous allons utiliser la Stanford Portable Library, et nous allons d'abord
inclure gevents.h afin que nous puissions écouter pour les mouvements de la souris.
Incluons alors gobjects.h sorte que nous pouvons déclarer des choses comme ovales ou
cercles, vraiment.
Et puis nous allons inclure gwindow.h sorte que nous avons une fenêtre graphique pour
tout.
>> Déclarons principal de la manière habituelle.
Et nous allons déclarer maintenant et instancier ou créer cette fenêtre, GWindow -
et nous appelons la fenêtre variables -
obtient newGWindow.
Et nous allons arbitrairement, il est 320 pixels par 240 pixels.
>> Disons prochaine instancier un cercle.
Mais pour instancier ce cercle, nous devons faire un peu plus de travail.
En particulier, nous allons Remplissez ce cercle de sorte que l'ensemble de chose est
noir et pas seulement la aperçu de celui-ci.
Goval -
nous l'appellerons cercle -
obtient newGOval.
Nous mettrons cet ovale à 0, 110, et nous allons faire les ovales de 20 pixels de large par
20 pixels de haut - en d'autres termes, un diamètre de 20 ou d'un rayon de 10.
>> Fixons maintenant la couleur de ce cercle être entre guillemets, «noir». Disons
désormais fixé il être rempli en spécifiant vrai.
Et maintenant, enfin, nous allons ajouter le cercle de la fenêtre de la manière suivante, grâce à quoi l'
ce dernier est ajouté à la première.
>> Déclarons maintenant un double.
Nous l'appellerons vitesse.
Et quelque peu arbitraire, disons que le vitesse de ce cercle sera
2.0, en d'autres termes, deux pixels pour chaque unité de temps.
Et maintenant, de laisser délibérément induire une boucle infinie.
>> Alors, comment faire de ce cercle rebondir et-vient?
Eh bien, supposons que dans cette boucle pour chaque unité de temps, nous sommes
va déplacer le cercle un peu bit sur la base de sa vitesse de 2 pixels
par unité de temps.
Mais sans cesse, nous allons avoir à vérifier si le cercle est en contact avec le
bord droit de l'écran ou la gauche bord de l'écran, parce que si, nous
besoin pour rebondir, pour ainsi dire.
>> Comment mettre en œuvre la notion de rebondir?
Eh bien, si nous allons à 2 pixels vers la droit par unité de temps, pour rebondir
le bord droit, on ne peut tout simplement inverser que, pour être négatives 2 pixels par unité
de temps, réduisant ainsi à néant la vitesse.
Donc, en fait, rebond est relativement simple.
>> Passons d'abord le cercle par ce nombre pixels le long de l'axe x, de ce
le nombre de pixels le long de l'axe y.
En d'autres termes, nous ne voulons pas qu'il déplacer le long de l'axe y du tout.
Nous voulons seulement pour rebondir et-vient à gauche et à droite.
>> Et nous allons vérifier maintenant dans cette boucle si la coordonnée x du cercle, plus
la largeur du cercle est plus grand supérieure ou égale à la
largeur de la fenêtre -
en d'autres termes, si l'emplacement de l'entourage plus la largeur du cercle
lui-même est maintenant passé le bord de la fenêtre, nous serions
mieux renverser notre vitesse -
vitesse obtient vitesse négative, ce qui retournement positif à un
négatif ou de négatif à positif.
Mais que faire si le cercle se déplace de de droite à gauche et il frappe donc
le bord gauche?
En d'autres termes, si la coordonnée x d' la boucle est inférieure ou égale
à 0, nous allons aller de l'avant et de nouveau inverser notre vitesse.
>> Alors, pourquoi n'ai-je pas ajoutée dans le largeur du cercle ce
temps, comme je le faisais avant?
Eh bien, gardez à l'esprit que les coordonnées d'un objet sont définis
par son coin supérieur gauche, non par son milieu.
Et quand le cercle se déplace de de gauche à droite, nous devons vérifier
si le bord droit de l' cercle a passé l'
le bord droit de la fenêtre.
Donc, pour comprendre ce que c'est, nous avons pour obtenir la coordonnée x du cercle
plus la largeur du cercle pour déplacer nous du haut à gauche
coin, de manière efficace, à la coin en haut à droite.
Lorsque le cercle se déplace de droite à gauche, quant à lui, nous n'avons pas besoin de
s'embêter avec cette addition, parce que le coin supérieur gauche du cercle est
déjà la valeur nous allons obtenir de rendez x.
>> Passons maintenant la balle.
Voyons maintenant enregistrer, compiler et exécuter ce programme, faire rebondir,. / rebond.
Et là, nous avons un programme.
>> Mais le cercle se déplace horriblement rapide, il est presque impossible de voir ce qui est
passe réellement.
Nous allons donc tout à fait le programme de force par cliquant sur le X dans le coin supérieur droit
coin ici.
Passons maintenant de nouveau dans le code source et ralentir les choses un peu de bits.
>> En d'autres termes, dans cette infinie boucle, plutôt que juste et mouvement et
déplacer et encore, ad nauseam, attardons pour quelques millisecondes
avant de procéder à déplacer à nouveau.
En particulier, nous allons aller au fond de la boucle infinie ici et simplement
mettre en pause pour, par exemple, 10 millisecondes à chaque itération.
Voyons maintenant recompiler et ré-exécuter rebond.
Et maintenant, nous voyons un beaucoup plus raisonnable mise en œuvre, où nous pouvons voir le
cercle rebondir vraiment sur la gauche et côté droit.