Tip:
Highlight text to annotate it
X
>> DAVID Malan: Escriurem un programa la participació d'una finestra i un cercle amb
el cercle rebotant fora de l'esquerra i dreta
vores d'aquesta finestra.
Per a això, farem servir l'Stanford Biblioteca Portable, i anem primer
incloure gevents.h perquè puguem escoltar els moviments del ratolí.
Anem a continuació inclouen gobjects.h perquè podem declarar coses com ovals o
cercles, de veritat.
I després anem a incloure gwindow.h perquè tenim una finestra gràfica per
tot.
>> Anem a declarar principal de la forma habitual.
I ara anem a declarar i crear instàncies o crear aquesta finestra, GWindow -
i anem a trucar a la finestra de variables -
aconsegueix newGWindow.
I arbitràriament ho aconseguirem 320 píxels per 240 píxels.
>> Anem a la propera instància d'un cercle.
Però per crear instàncies d'aquest cercle, hem de fer una mica més de treball.
En particular, anem a omplir en aquest cercle de manera que la cosa sencera és
negre i no només el resum d'elles.
GOVAL -
ho anem a anomenar el cercle -
aconsegueix newGOval.
Anem a posar aquest oval a 0, 110, i anem a fer els ovals 20 píxels d'amplada per
20 píxels d'alt - en altres paraules, un diàmetre de 20 o d'un radi de 10.
>> Ara anem a configurar el color d'aquest cercle ser cometes, tanca, "negre". Anem a
estableix ara que s'omplirà especificant cert.
I ara, finalment, anem a afegir el cercle per la finestra de la següent manera, mitjançant el qual el
aquest últim s'afegeix a la primera.
>> Ara anem a declarar un doble.
L'anomenarem velocitat.
I alguna cosa arbitrària, diguem que el velocitat d'aquest cercle serà
2,0, en altres paraules, 2 píxels per a cada unitat de temps.
I ara anem a deliberadament induir un bucle infinit.
>> Llavors, com fer que aquest cercle van i tornen?
Bé, anem a suposar que dins d'aquest bucle que per cada unitat de temps, que estem
va a moure el cercle una mica bits basat en la seva velocitat de 2 píxels
per unitat de temps.
Però contínuament, haurem de comprovar si el cercle està en contacte amb la
vora dreta de la pantalla o l'esquerra vora de la pantalla, ja que si és així,
El necessitareu per recuperar-se, per dir-ho.
>> Com implementar la noció de rebot?
Bé, si anem a 2 píxels a la dret per unitat de temps, a rebotar
la vora dreta, simplement pot revertir que per ser negatius 2 píxels per unitat
de temps, negant així la velocitat.
Així que de fet, el rebot és relativament senzill.
>> Primer anem a moure el cercle per ella molts píxels al llarg de l'eix x, d'aquest
el nombre de píxels al llarg de l'eix i.
En altres paraules, nosaltres no volem que moure al llarg de l'eix i en absolut.
Només volem que rebot de nou endavant i cap a l'esquerra i la dreta.
>> I ara anem a comprovar dins d'aquest bucle si la coordenada x del cercle més
l'amplada del cercle és més gran que o igual a la
amplada de la finestra -
En altres paraules, si la ubicació del cercle més l'amplada del cercle
sí que és ara més enllà de la vora de la finestra, estaríem
millor invertir nostra velocitat -
velocitat aconsegueix velocitat negativa, d'aquesta manera llançar una positiva a una
negatiu o una negativa a una positiva.
Però, i si el cercle s'està movent des de dreta a esquerra i, per tant, colpeja
la vora esquerra?
En altres paraules, si la coordenada x d' el cercle és ara menys de o igual
a 0, seguirem endavant i de nou invertir la nostra velocitat.
>> Així que per què no he afegit en el amplada del cercle aquesta
temps, com ho vaig fer abans?
Bé, tingui en compte que les coordenades d'un objecte es defineixen
per la seva cantonada superior esquerra, no pel seu centre.
I així, quan el cercle s'està movent des esquerra a dreta, hem de comprovar
si la vora dreta de la cercle ha passat la
vora dreta de la finestra.
Així que per saber el que és això, tenim per obtenir la coordenada x del cercle
més l'amplada del cercle per moure nosaltres mateixos a partir de l'esquerra superior
cantonada, de manera efectiva, a la la cantonada superior dreta.
Quan el cercle es mou de dreta a esquerra, per la seva banda, que no cal
molestar amb l'addició, causa que el cantonada superior esquerra del cercle és
ja el valor que anem a obtenir d'obtenir x.
>> Ara anem a moure la pilota.
Ara anem a guardar, compilar i executar aquest programa, fer rebotar,. / rebot.
I aquí tenim un programa.
>> Però el cercle s'està movent tan condemnadament ràpid, que és gairebé impossible veure el que hi ha
realment està passant.
Així que anem bastant el programa de la força per clic a la X a la part superior dreta
cantonada aquí.
Ara anem a tornar en el codi font i retardar les coses una mica.
>> En altres paraules, dins d'aquesta infinita llaç, i no només ens movem i
mouen una i altra vegada, fins a la sacietat, anem a persistir per uns pocs milisegons
abans de procedir a moure de nou.
En particular, anirem a la part inferior del bucle infinit aquí i simplement
fer una pausa per, per exemple, 10 mil · lisegons en cada iteració.
Ara anem a tornar a compilar i tornar a executar rebot.
I ara veiem una molt més raonable posada en pràctica, en el qual podem veure el
veritable cercle rebotar al esquerra i el costat dret.