Puede acceder al curso completo aquí: Descubre SFML para C ++ desarrollo del juego

Manejo de las interacciones del usuario

Hay muchas maneras en las que un usuario puede interactuar con el programa desde la pulsación de botones, de apertura y cierre de ventanas y eventos incluso simples como mover el ratón. Cada una de estas interacciones activa un evento , que capturamos en el bucle de ejecución y, o bien podemos elegir para manejar o ignorar. Podríamos pasar horas la cobertura de eventos solo, pero sólo estamos realmente interesados ​​en tres por ahora:. Cerrando la ventana, hacer clic en un botón del ratón, y pulsando una tecla del teclado, en concreto, la barra espaciadora

Para manejar cualquier caso, primero tenemos que crear un objeto sf :: Evento y llamar a la función window.pollEvent () . Este reúne todos los eventos asociados a una ventana específica (como se puede tener múltiples ventanas abiertas a la vez) y continuarán devolver verdadero si bien hay eventos en curso. Por ejemplo, ya estamos manejando el caso de cierre de la ventana con este código:
evento sf :: Evento, mientras que (window.pollEvent (evento)) {if (event.type == sf :: Evento :: cerrada) {window.close (); }} 123456sf :: Eventevent, mientras que (window.pollEvent (evento)) {if (event.type == sf :: Evento :: cerrada) {window.close ();}}

Esto es sólo buscando un evento tipo de Evento sf :: :: cerrada, activa cuando el usuario sale de la ventana actual. Sin embargo, también queremos monitorizar los clics del ratón y las pulsaciones de la barra espaciadora. Vamos a empezar con los clics del ratón. Podemos proporcionar una persona si caso como este:
else if (event.type == sf :: Evento :: MouseButtonPressed) {std :: cout << "ratón pulsado el botón" << std :: endl;} 123elseif (event.type == sf :: Evento :: MouseButtonPressed ) {std :: cout << "ratón pulsado el botón" << std :: endl;}

Si bien esto no está haciendo nada más que imprimir “botón del ratón pulsado” cada vez que el usuario hace clic en algún lugar del ratón en la ventana , podemos ver lo fácil que es manejar los eventos de usuario simples. Para hacer frente a las prensas de la barra espaciadora, primero tenemos que detectar para un evento KeyPressed y luego averiguar si es o no la tecla presionada la barra espaciadora era así:
else if (event.type == sf :: Evento :: KeyPressed) {if (sf :: :: teclado isKeyPressed (sf :: :: teclado Espacio)) {std :: cout << "pulsa la barra espaciadora" << std :: endl; }} 12345elseif (event.type == sf :: Evento :: KeyPressed) {if (sf :: :: teclado isKeyPressed (sf :: :: teclado Espacio)) {std :: cout << "pulsa la barra espaciadora" < el isKeyPressed () devuelve verdadero si la clave que estamos buscando es el que se ha pulsado y falso en caso contrario. Si intenta presionar la barra espaciadora que no sea nada, no pasará nada, pero la barra espaciadora se imprimirá el mensaje “barra espaciadora presionada”. Podemos poner todo junto como esto;
evento sf :: Evento, mientras que (window.pollEvent (evento)) {if (event.type == sf :: Evento :: cerrada) {window.close (); } Else if (event.type == sf :: Evento :: MouseButtonPressed) {std :: cout << "ratón pulsado el botón" << std :: endl; } Else if (event.type == sf :: Evento :: KeyPressed) {if (sf :: :: teclado isKeyPressed (sf :: :: teclado Espacio)) {std :: cout << "pulsa la barra espaciadora" < Nota cómo todo esto ocurre dentro del bucle de ejecución, pero antes de sacar cualquier cosa . Por lo general, lo primero que hacemos en un bucle de ejecución es de proceso y mango interacciones ya que pueden afectar el estado y por lo tanto los elementos que se sienten atraídos por la ventana.

Transcripción

Hola a todos, bienvenidos a un tutorial sobre el manejo de las interacciones del usuario. Aquí, sólo vamos a explorar un par de las interacciones de los usuarios que vamos a utilizar en nuestro juego, cómo detectarlos, y cómo responder a ellos. Lo que las tareas van a ser aprender primero acerca de cómo supervisar eventos, entonces responderá a dejar de eventos, hemos hecho ya llevamos un rápido vistazo a eso, entonces vamos a responder a los clics del ratón, y, por último, a las pulsaciones de botón. Así que vamos a la cabeza para el código y empezar.

De acuerdo, así que como he dicho, hemos hecho ya una especie de cubierta de los acontecimientos y que va a ser el window.close. Pero no hemos cubierto eventos realmente mucho en general. Así que no vamos a estar creando algo fuera de aquí por ahora. Así que en su bucle, mientras que aquí, el bucle principal del juego, habrá una serie de eventos que tienen lugar podría haber múltiples acontecimientos que suceden a la vez.

Por ejemplo, si el usuario está manteniendo pulsada una tecla y pulsando el ratón, podría haber un montón de cosas suceden de acuerdo? Así que lo que hacemos es que es por eso que tenemos un bucle while porque puede haber múltiples eventos, si sólo hacemos una sentencia if, que sólo va a marcar uno de ellos, lo cual no es lo que queremos. Así mediante el uso del window.pollEvent, esto va a comprobar para ver si hay acontecimientos que suceden que están relacionados con esta ventana particular.

Técnicamente, se puede tener múltiples ventanas con SFML. Una vez más, eso es un poco más allá del alcance de este curso. Pero para cada ventana nueva, eventos que desea colocarse a que uno.

Una vez más, sólo tenemos una ventana para trabajar con ellos. Por lo que debe estar bien aquí. Así se crea un objeto de evento SF, y pasarlo a los eventos de la encuesta de esa manera tenemos acceso a ella dentro del bucle while. Así que aquí, queremos ser la comprobación para ver lo que se están produciendo acontecimientos, que en realidad sólo necesitamos comprobar los que nos interesa.

Por ejemplo, si sólo estamos manejo de clics del ratón, que no necesita hacer nada más. Pero por lo menos, usted debe tener presente que ha de votación para el evento cerrado, ¿de acuerdo? De lo contrario, puede que tenga problemas con su juego sólo correr continuamente.

Bueno, por lo eventos tendrá muchos tipos posibles asociados a ella. En este caso, este es el caso event.type SF cerrado, y sólo estamos cerrando la ventana. De acuerdo, también deberás responder a los clics del ratón. Así que cuando se hace clic en lo animado, queremos disminuir un poco de energía, y también responder a las pulsaciones de teclas. Así que al final, cuando se desea reiniciar el juego, pulsa la barra espaciadora, y va a reiniciar todo.

Así que la primera obra de que se deja a los clics del ratón. Lo que vamos a hacer es que vamos a hacer un elifevent.type. Voy realidad que sé lo que debería ser una persona si, y necesitamos estos. Está bien, haciendo un poco confundido con algo de código Python. Bueno, por lo que vamos a hacer esto bien, y luego vamos a decir otra cosa si events.type va a ser igual a Y aquí es donde queremos escuchar una pulsación de botón. Así que vamos a tirar el botón evento de ratón evento SF presionado.

De acuerdo, no vamos a la preocupación acerca de la liberación o algo por el estilo. Sólo queremos comprobar para ver si se pulsa el botón del ratón. Está bien, así que si se pulsa el botón del ratón, se puede hacer casi cualquier cosa que queramos. No vamos a comprobar la detección de colisiones o nada todavía. Vamos a cubrir mucho más adelante en este curso estaremos cubriendo con el tiempo sin embargo.

Y por ahora lo que sólo podemos hacer es imprimir algo más se quedará fuera Estándar C. Diremos botón del ratón, bien. Y entonces haremos una nueva línea, supongo. De acuerdo, bien, podemos hacer realidad podríamos acaba de hacer al final L. Por lo tanto, debería ser en realidad endl estándar bien.

Por lo tanto, si estamos comprobando si los botones del ratón y estamos imprimiendo, eso es bueno. También sabe, en realidad vamos a seguir adelante y ejecutar este y demostrar esto. Así que vamos a la terminal de clara recompilará it./main. Está bien, se puede ver que estoy haciendo clic en la pantalla, y estamos detectando el botón del ratón está siendo impreso por ahí todo el tiempo.

Nota cómo, si estoy haciendo clic fuera de la pantalla, nada está registrando. Ahora estoy un poco al hacer clic en todo el terminal en este momento. No pasa nada bien? Esto se debe a que sólo estamos detectando clics del ratón dentro de esta ventana en particular. Ese es el comportamiento deseado, al menos para nuestro juego.

De acuerdo, cosas interesantes, por lo que sabemos cómo detectar los clics del ratón. Una vez más, vamos a entrar en la detección exacta de colisión más tarde para comprobar para ver si estamos haciendo click sobre un objeto, sino también a querer prensas teclado del monitor. Así que vamos a hacer otra cosa si el event.type va a ser igual a la tecla pulsada evento SF.

Está bien así que en realidad no lo hacen lanzar inmediatamente a la derecha en la comprobación para ver si se ha pulsado la tecla barra espaciadora. Lo que debe comprobar es ver si los eventos fue una pulsación de tecla, en general, está bien, entonces podemos entrar en eso más allá y ver si la tecla presionada fue una barra espaciadora. Y podemos también poner en práctica esa lógica aquí. Vamos a él más adelante de todos modos necesidad.

Así que va a decir algo así como si el teclado es SF tecla pulsada, y haremos SF, el espacio del teclado. Está bien, así que asegúrese de que usted puede ver toda la cosa. Así que esto puede parecer un poco rotonda, hay que ver si el teclado es tecla pulsada se llama. Y con esto se llevará en una clave para comprobar para ver si está presionado. En concreto, sólo estamos comprobando si se pulsa la barra espaciadora. De acuerdo, ese espacio de tecla de igual a verdadero, sólo tendremos que imprimir algo como barra espaciadora presionada. pulsa la barra espaciadora, está bien, y luego nos va a terminar la línea.

De acuerdo, por lo que puede también comprobar si hay otras teclas. Por ejemplo, si está haciendo como un juego de movimiento en el que pulsa las teclas de flecha para moverse, es probable que desee comprobar para un máximo de flecha abajo, flecha izquierda y derecha y así sucesivamente y así sucesivamente. En caso de que sólo estamos interesados ​​en si se pulsa la tecla de espacio, de acuerdo, por lo que si esto devuelve cierto, eso significa que se pulsa la tecla de espacio, se puede imprimir el documento.

De acuerdo, así que vamos a ir de nuevo de vuelta a la terminal. recompilación de let, repetición de let. Está bien, y estoy presionando algunas otras teclas, no pasa nada. Pronto como la barra espaciadora de prensa que, a continuación, se puede ver que se pulsa la barra espaciadora. También sigue siendo la detección de clics del ratón, y, por supuesto, es la detección de eventos cerca también.

De acuerdo, por lo que en realidad es casi tan complejo como el manejo de la interacción del usuario es a ir en nuestro juego. Como dije, usted puede hacer esto realmente compleja si se quiere, pero estamos realmente sólo va a estar escuchando a estos dos comandos, tres si se incluye el cierre de la ventana. Muy bien, así que siéntase libre de visitar algunas de las otras teclas. Ver si se puede implementar como un pequeño movimiento tipo de cosas si quieres si te sientes aventurero. De lo contrario, vamos a acabar con la sección aquí. Cuando volvamos, vamos a estar hablando acerca de cómo supervisar el tiempo es que va a ser una característica importante de nuestro juego. Así que estad atentos para que, gracias por su atención. Nos vemos en la próxima.

interesado en continuar? Echa un vistazo a la plena Descubrir SFML para C ++ desarrollo del juego de golf, que es parte de nuestra programación en C ++ paquete.

Mensajes relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *