1 Archivos adjunto(s)
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Buenas. Estoy intentado generar un pulso único con el keyboard sensor, pero no doy con el tema (o género 2 o ninguno o 1 y después de un tiempo otro, etc). ¿alguien me puede arrojar algo de luz al tema?
Con el property sensor si lo he conseguido (ver imagen adjunta) pero necesitaba algo más interactivo para facilitarme el desarrollo de un modulo.
Archivo adjunto 149925
Gracias por adelantado.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Activa el tap, creo que es eso (eso no existía cuando yo lo usaba.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Creo que esa parte nunca la he visto muy bien explicada. Un evento de pulsación de tecla tiene tres fases posibles:
No pulsada->pulsada (botón, en el ge)
Pulsada->pulsada (ningún botón)
Pulsada->no pulsada (botón ··· en el ge).
(Con el inv tendríamos también el no pulsada->no pulsada).
Para que cuando alguno de esos flancos se repita (por ejemplo, en el caso pulsada->pulsada), el botón tap hace que sólo se envíe el primero de ellos.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
No lo había entendido nunca como flancos de una señal, ahora tiene sentido todo.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Bueno, el único problema es que no funciona, o no está implementado así, o yo entendí mal el sentido. Edito: revisando, si tenemos el botón tap pulsado responde así:
Nada activado -> un pulso cuando pasa de no pulsado a pulsado.
True activado (···, antes lo puse al revés) -> un pulso en cada frame.
False activado (, antes lo puse al revés) -> un pulso cuando pasa de no pulsado a pulsado. Esto me marea cantidad.
En resumen: vaya cosa rara montaron ahí cada vez que me pongo a hacer algo, me toca probar combinaciones hasta dar con la que me interesa.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Pero entonces el false no es lo mismo que nada activado? Por otra parte, creo que la funcionalidad la cambiaron, porque antes de estar el botón tap ya se podía hacer el mismo efecto solo con los true/false modes. Diría que era activando el false, aunque no te lo sabría decir seguro.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
¿Para que usáis eso? Yo con el tap y el invert me apaño perfectamente, no entiendo la utilidad de esos botones, a no ser que dependan de un script asociado.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Pero antes no existía el tap que yo sepa. Más que nada porque yo no los había utilizado nunca y no sabía que existían. Como digo arriba, cuando fui a probar lo que pedía Lordloki lo intenté hacer solo con los true y false que es como lo hacía yo antes y no funcionaba. Entonces es cuando advertí que habían puesto el botón tap.
Hay que tener en cuenta que no uso el ge de Blender igual desde, la 2.3x o 2.43 como mucho.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Yo creo que mi caso no es un caso representativo puesto que al no enlazar un actuador sino un módulo de c no tiene igual comportamiento.
He revisado el código de los actuadores y todos evitan el pulso negativo, aunque tú no quieras:
Código:
Bol bnegativeevent = sca_iactuator:isnegativeevent(),
Sca_iactuator:removeallevents().
If (bnegativeevent)
Return; // do nothing on negative events.
Voy hacer lo mismo en el modulo:
Código:
Sca_isensor* e_sensor = object->findsensor(keyboard), if (e_sensor->getstate () &&.e_sensor->getprevstate ())
Cout << solo pulso positivo\n;
. Gracias.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Bueno, reitero que en teoría, el pulso false debería lanzarse cuando termina el evento. Esto es utilísimo para el tema de clicks sobre objetos (en los que tú quieres que ocurra la acción cuando sueltas el botón, no cuando lo pulsas) y en general para evitar repeticiones de eventos en acciones.
Un ejemplo clásico: imaginad un juego dónde tienes el botón de pausa y, cuando lo pulsas, tienes el en mismo lugar el botón de continuar el juego. Si no se lanza el evento en los flancos de desactivación (el false), lo que ocurriría es que se lanzaría el evento de pausa en cuanto pulsaras, se lanzaría el evento de continuar en el mismo frame o en el siguiente frame (depende de la implementación, y en el segundo caso probablemente no te habría dado tiempo a soltar el ratón) y lo que notarías es que el juego no se pausa cuando pulsas ese botón, o que hay un extraño parpadeo y luego todo sigue igual.
Con el flanco de false te aseguras de que un botón no funciona si antes no se ha hecho click sobre el (pulse true) y efectúa su acción cuando lo sueltas (flanco false).
Pero repito que no sé cómo porras han implementado esto.
Por cierto, ¿cómo incrustas módulos de c? ¿te refieres a empotrándolos desde Python o haces alguna otra cosa?
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Pero, todo eso que explicas se resuelve fácilmente con el tap y el invert.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Yes, y know, pero ni siquiera deberían hacer falta con una implementación estándar. Claro que igual su protocolo para esos botones es otro, el caso es que nunca he encontrado una documentación decente y clara sobre ellos.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Yo siempre he pensado (y sigo haciéndolo) que esos botones no funcionaban bien, no se les ve ninguna lógica.
Como hacer un unico pulso positivo o negativo con el sensor keyboard del BGE
Cita:
Por cierto, ¿cómo incrustas módulos de c? ¿te refieres a empotrándolos desde Python o haces alguna otra cosa?
Hay un repositorio en https://github.com/makersf/blenderdev que te permite cargar modulo en c con un nuevo controller. El problema (por el que ya he dejado de usarlo) es que, al utilizar más funciones de Blender te obliga a enlazar a las diferentes librerías internas con lo que al final tienes un módulo que te ocupa tanto como el blenderplayer con lo cual no tiene mucha utilidad. Quizás se pueda utilizar solo si se quieren hacer cálculos que consuman mucha CPU, pero no teniendo que llamar a funciones de Blender.