uqbar-project / wollok

Wollok Programming Language
GNU General Public License v3.0
60 stars 16 forks source link

Wollok Game: mantener tecla apretada #1819

Open asanzo opened 5 years ago

asanzo commented 5 years ago

Buenas!

Al empezar a hacer juegos muchos chicos empiezan a requerir que puedan suceder cosas mientras mantenés una tecla apretada.

No sé cómo lo implementaría. Alice tiene 4 eventos:

Scratch tiene 1 sola cosa: Selección_999(370) Que si mantenés apretado funciona como el "durante" de Alice, lo hace varias veces.

Creo que para Wollok podríamos tener:

// El que ya tenemos:
keyboard.w().onPressDo({jugador.saltar()})
// Uno nuevo:
keyboard.w().whilePressRepeat({jugador.moverDerecha()},200)

El 200 me lo imagino como la cantidad de milisegundos que ocurren entre cada repetición (hoy ese moverDerecha() mueve un casillero, y eso se haría demasiado rápido). La nomenclatura de whilePressRepeat respeta el espíritu de la que cargué en el issue #1818

Y pensaría si quiero agregar el onKeyDown y el onKeyUp, que podrían servir para resolver otros problemas, pero creo que el más "apremiante" es el "mientras".

PalumboN commented 3 years ago

Bueno, acá estuvimos charlando con el equipo y...

keyboard.w().whilePressRepeat(200, { jugador.moverDerecha() })

Esta es una implementación que nos gusta, es fácil, directa, declarativa y tiene poder.

Estuvimos pensando en los otros métodos y en la nomenclatura, así atacamos todo de una (o lo que permita la tecnología base). La interfaz de Key propuesta sería:

Les convence? Falta algo? Algo no les gusta

Preguntas para contestar:

@asanzo @fdodino @lspigariol @nscarcella @npasserini

fdodino commented 3 years ago

Me gusta, solo me da cosa que no sea whilePressedDo en lugar de whilePress (me suena raro no usar el participio).

¿Qué pasa si apretás - soltás y volvés a apretar antes de que pase el tiempo recibido? ¿Se ejecuta o espera?

Me da lo mismo, solo me gustaría que lo aclare el wollokdoc.

asanzo commented 3 years ago

QUÉ LEEENDOOOO

A ver:

En el ejemplo usás whilePressRepeat pero abajo aclarás whilePressDo. ¿Cuál es la que va? Mi propuesta era cambiar el on por el while para denotar la diferencia semántica entre ambos, y porque soy un obsesivo también había cambiado el Do por el Repeat para que fuera aún más claro. Esto es cuestión de gustos, me adecúo a lo que les parezca. (Podemos hacer una votación en el Discord para moverlo, si quieren :P )

Sobre el comportamiento de soltar y apretar, me pongo a pensar en la jugabilidad.

  1. Por ejemplo, con un movimiento, si yo mantengo apretado el personaje haria "tac, tac, tac" y se iría moviendo. Y creo que si ese "tac" me parece lento, intuitivamente intentaría apretar varias veces para acelerarlo, por lo que quizás sí querés que se repita antes de tiempo.
  2. Pero también me imagino en un juego tipo el Overcooked, si querés implementar una lógica tipo la del lavado de platos, donde no querés que se pueda acelerar el lavado, sino a propósito querés que el usuario pase una cantidad de tiempo molesta manteniendo apretado el botón, quizás lo que quiero es que no se repita más rápido de lo que puse.

Por cierto, gran proyección hiciste Rasta de darte cuenta eso.

Abrazop!!

npasserini commented 3 years ago

Pregunta, ¿es mucho quilombo dejar el bloque como último parámetro? Luego eso podria tener chiches sintácticos como en otros lenguajes. Wollok lo tiene hoy sólo para los mensajes de un parámetro, pero imagino que no es tan complejo extenderlo a n parámetros, si el bloque es el último.

On Wed, Mar 17, 2021 at 11:47 AM asanzo @.***> wrote:

QUÉ LEEENDOOOO

A ver:

En el ejemplo usás whilePressRepeat pero abajo aclarás whilePressDo. ¿Cuál es la que va? Mi propuesta era cambiar el on por el while para denotar la diferencia semántica entre ambos, y porque soy un obsesivo también había cambiado el Do por el Repeat para que fuera aún más claro. Esto es cuestión de gustos, me adecúo a lo que les parezca. (Podemos hacer una votación en el Discord para moverlo, si quieren :P )

Sobre el comportamiento de soltar y apretar, me pongo a pensar en la jugabilidad.

  1. Por ejemplo, con un movimiento, si yo mantengo apretado el personaje haria "tac, tac, tac" y se iría moviendo. Y creo que si ese "tac" me parece lento, intuitivamente intentaría apretar varias veces para acelerarlo, por lo que quizás sí querés que se repita antes de tiempo .
  2. Pero también me imagino en un juego tipo el Overcooked, si querés implementar una lógica tipo la del lavado de platos, donde no querés que se pueda acelerar el lavado, sino a propósito querés que el usuario pase una cantidad de tiempo molesta manteniendo apretado el botón, quizás lo que quiero es que no se repita más rápido de lo que puse.

    • Creo que hoy con el game.schedule se puede resolver el punto 2, así que yo iría por la opción de que al volver a presionar se repita por más que no haya pasado el tiempo original.
    • Sospecho también es más fácil de implementar que la otra, así que vayamos por eso.

Por cierto, gran proyección hiciste Rasta de darte cuenta eso.

Abrazop!!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/uqbar-project/wollok/issues/1819#issuecomment-801144667, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDLKOPECNZXJ7YPAKSLDCLTEC6JNANCNFSM4I3APFEQ .