wollok icon indicating copy to clipboard operation
wollok copied to clipboard

Wollok Game: mantener tecla apretada

Open asanzo opened this issue 5 years ago • 4 comments

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:

  • El simple, el que tenemos nosotros, por más que mantengas una tecla apretada se hace 1 vez image
  • Y un "mientras" que considera el inicio (1 vez), el durante(muchas veces), y el final (1 vez): Selección_999(341)

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".

asanzo avatar Sep 27 '19 00:09 asanzo

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:

  • onPressDo(block) --> Ejecuta una sola vez al presionar la tecla (al principio).
  • whilePressDo(ms, block) --> Ejecuta al presionar la tecla (al principio) y cada ms que se mantenga apretada.
  • onReleaseDo(block) --> Ejecuta al soltar la tecla (al final).

Les convence? Falta algo? Algo no les gusta

Preguntas para contestar:

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

@asanzo @fdodino @lspigariol @nscarcella @npasserini

PalumboN avatar Mar 13 '21 23:03 PalumboN

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.

fdodino avatar Mar 16 '21 02:03 fdodino

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!!

asanzo avatar Mar 17 '21 14:03 asanzo

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 .

npasserini avatar Mar 18 '21 11:03 npasserini