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.
🖼️
Estamos trabajando para mostrar las imágenes del foro
Adjunto #149925
Gracias por adelantado.
-- IMÁGENES ADJUNTAS --
🖼️
Estamos trabajando para mostrar las imágenes del foro
Adjunto #149925
Activa el tap, creo que es eso (eso no existía cuando yo lo usaba.
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.
No lo había entendido nunca como flancos de una señal, ahora tiene sentido todo.
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.
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.
¿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.
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.
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:
[code]
Bol bnegativeevent = sca_iactuator:isnegativeevent(),
Sca_iactuator:removeallevents().
If (bnegativeevent)
Return; // do nothing on negative events.
[/code]
Voy hacer lo mismo en el modulo:
[code]
Sca_isensor* e_sensor = object->findsensor(keyboard), if (e_sensor->getstate () &&.e_sensor->getprevstate ())
Cout << solo pulso positivo\n;
[/code]
. Gracias.
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?
Pero, todo eso que explicas se resuelve fácilmente con el tap y el invert.
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.
Yo siempre he pensado (y sigo haciéndolo) que esos botones no funcionaban bien, no se les ve ninguna lógica.
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 [url]https://github.com/makersf/blenderdev[/url] 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.