Tip:
Highlight text to annotate it
X
>> DAVID MALAN: Vamos a escribir un programa la participación de una ventana y un círculo con
el círculo rebotando fuera de la izquierda y derecha
bordes de esa ventana.
Para ello, vamos a usar el Stanford Biblioteca Portable, y vamos primero
incluir gevents.h para que podamos escuchar los movimientos del ratón.
Vamos a continuación incluyen gobjects.h para que podemos declarar cosas como óvalos o
círculos, de verdad.
Y luego vamos a incluir gwindow.h para que tenemos una ventana gráfica para
todo.
>> Vamos a declarar principal de la forma habitual.
Y ahora vamos a declarar y crear instancias o crear esa ventana, GWindow -
y vamos a llamar a la ventana de variables -
consigue newGWindow.
Y arbitrariamente lo lograremos 320 píxeles por 240 píxeles.
>> Vamos a la próxima instancia de un círculo.
Pero para crear instancias de este círculo, tenemos que hacer un poco más de trabajo.
En particular, vamos a llenar en este círculo de modo que la cosa entera es
*** y no sólo el resumen de ellas.
GOVAL -
lo vamos a llamar el círculo -
consigue newGOval.
Vamos a poner este óvalo a 0, 110, y vamos a hacer los ovales 20 píxeles de ancho por
20 píxeles de alto - en otras palabras, un diámetro de 20 o de un radio de 10.
>> Ahora vamos a configurar el color de ese círculo ser comillas, cierra, "***". Vamos a
establece ahora que se llenará especificando cierto.
Y ahora, por último, vamos a añadir el círculo para la ventana de la siguiente manera, mediante el cual el
este último se añade a la primera.
>> Ahora vamos a declarar un doble.
Lo llamaremos velocidad.
Y algo arbitraria, digamos que el velocidad de este círculo será
2,0, en otras palabras, 2 pixeles para cada unidad de tiempo.
Y ahora vamos a deliberadamente inducir un bucle infinito.
>> Entonces, ¿cómo hacer que este círculo van y vuelven?
Bueno, vamos a suponer que dentro de este bucle que por cada unidad de tiempo, que estamos
va a mover el círculo un poco bits basado en su velocidad de 2 píxeles
por unidad de tiempo.
Pero continuamente, vamos a tener que comprobar si el círculo está en contacto con la
borde derecho de la pantalla o la izquierda borde de la pantalla, ya que si es así,
Lo necesitará para recuperarse, por así decirlo.
>> Cómo implementar la noción de rebote?
Bueno, si vamos a 2 píxeles a la derecho por unidad de tiempo, a rebotar
el borde derecho, simplemente puede revertir que para ser negativos 2 píxeles por unidad
de tiempo, negando así la velocidad.
Así que de hecho, el rebote es relativamente sencillo.
>> Primero vamos a mover el círculo por ella muchos píxeles a lo largo del eje x, de este
el número de píxeles a lo largo del eje y.
En otras palabras, nosotros no queremos que mover a lo largo del eje y en absoluto.
Sólo queremos que rebote de nuevo adelante y hacia la izquierda y la derecha.
>> Y ahora vamos a comprobar dentro de este bucle si la coordenada x del círculo más
la anchura del círculo es mayor que o igual a la
ancho de la ventana -
En otras palabras, si la ubicación del círculo más el ancho del círculo
sí es ahora más allá del borde de la ventana, estaríamos
mejor invertir nuestra velocidad -
velocidad consigue velocidad negativa, de ese modo lanzar una positiva a una
negativo o una negativa a una positiva.
Pero ¿y si el círculo se está moviendo desde de derecha a izquierda y, por tanto, golpea
el borde izquierdo?
En otras palabras, si la coordenada x de el círculo es ahora menos de o igual
a 0, vamos a seguir adelante y de nuevo invertir nuestra velocidad.
>> Así que por qué no he añadido en el anchura del círculo esta
tiempo, como lo hice antes?
Bueno, tenga en cuenta que las coordenadas de un objeto se definen
por su esquina superior izquierda, no por su centro.
Y así, cuando el círculo se está moviendo desde izquierda a derecha, tenemos que comprobar
si el borde derecho de la círculo ha pasado la
borde derecho de la ventana.
Así que para saber lo que es eso, tenemos para obtener la coordenada x del círculo
más el ancho del círculo para mover nosotros mismos a partir de la izquierda superior
esquina, de manera efectiva, a la la esquina superior derecha.
Cuando el círculo se mueve de derecha a izquierda, por su parte, que no es necesario
molestarse con tal adición, debido a que el esquina superior izquierda del círculo es
ya el valor que vamos a obtener de obtener x.
>> Ahora vamos a mover el balón.
Ahora vamos a guardar, compilar y ejecutar este programa, hacer rebotar,. / rebote.
Y ahí tenemos un programa.
>> Pero el círculo se está moviendo tan condenadamente rápido, que es casi imposible ver lo que hay
realmente está pasando.
Así que vamos bastante el programa de la fuerza por clic en la X en la parte superior derecha
esquina aquí.
Ahora vamos a volver en el código fuente y retrasar las cosas un poco.
>> En otras palabras, dentro de esta infinita lazo, y no sólo nos movemos y
mueven una y otra vez, hasta la saciedad, vamos a persistir por unos pocos milisegundos
antes de proceder a moverse de nuevo.
En particular, vamos a ir a la parte inferior del bucle infinito aquí y simplemente
hacer una pausa para, por ejemplo, 10 milisegundos en cada iteración.
Ahora vamos a volver a compilar y volver a ejecutar rebote.
Y ahora vemos una mucho más razonable puesta en práctica, en el que podemos ver el
verdadero círculo rebotar en el izquierda y el lado derecho.