Basic - Recursividad o retroalimentación del ratón en QB64

 
Vista:
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Basic (en relación al último mes)
Gráfica de Basic

Recursividad o retroalimentación del ratón en QB64

Publicado por jose maria (6 intervenciones) el 14/08/2020 11:27:58
El siguiente código para QB64 emula si pinchamos con el ratón en una zona. El problema es que si pinchamos sin querer arrastrando el ratón en esa zona, el ratón se retroalimenta o existe una recursividad. Como hacer para que se considere como un solo click. Gracias a todos.
Código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SCREEN 9
LINE (200, 100)-STEP(100, 40), 15, B 'delimitar la zona que el raton puede recorre
'
DO
    WHILE _MOUSEINPUT
        IF _MOUSEX >= 200 AND _MOUSEX <= 200 + 100 AND _MOUSEY >= 100 AND _MOUSEY <= 100 + 40 AND _MOUSEBUTTON(1) THEN
            LOCATE 1, 1
            PRINT "Se ha hecho <click> en el rectangulo    ": SOUND 800, 0.5
            p = p + 1 'contador para saber cuantas veces se retroalimenta
            LOCATE 5, 1: PRINT "veces "; p; " "
        ELSEIF _MOUSEBUTTON(1) THEN
            LOCATE 1, 1
            PRINT "No se ha hecho <click> en el rectangulo "
            p = 0 'si pinchamos fuera del rectangulore iniciamos variable a (0)
        END IF
    WEND
LOOP WHILE INKEY$ = ""
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Recursividad o retroalimentación del ratón en QB64

Publicado por Nacho (3 intervenciones) el 15/08/2020 16:39:49
Eso pasa en muchas funciones que realiza el ratón o el teclado. Por eso, en vez de hacer lo que sea cuando pulsas una tecla o un botón del ratón se hace cuando la sueltas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Basic (en relación al último mes)
Gráfica de Basic

Recursividad o retroalimentación del ratón en QB64

Publicado por José maria (6 intervenciones) el 16/08/2020 12:21:17
Gracias por aportar tu experiencia. Pero me gustaría saber cómo hacer o qué función hay que de como resultado que cuente como un click al soltar el ratón, o si hay alguna rutina que lo haga. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Recursividad o retroalimentación del ratón en QB64

Publicado por Nacho (3 intervenciones) el 16/08/2020 13:31:50
1
2
3
4
5
6
7
8
9
10
PRINT "Hold down the left mouse button until you want to quit!"
DO
    i = _MOUSEINPUT ' read #1
    IF _MOUSEBUTTON(1) THEN PRINT "Left button down!": EXIT DO
LOOP
DO '                                                      need to wait
    i = _MOUSEINPUT '  read #2                         until the mouse
LOOP UNTIL NOT _MOUSEBUTTON(1) '                       button is released
 
PRINT "DONE!"

Ejemplo sacado de https://www.qb64.org/wiki/MOUSEBUTTON que entra en un while cuando pulsas un botón hasta que lo sueltas. En el momento en que lo sueltas haces lo que sea sin problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Basic (en relación al último mes)
Gráfica de Basic

Recursividad o retroalimentación del ratón en QB64

Publicado por jose maria (6 intervenciones) el 16/08/2020 14:41:57
Este ejemplo lo ví en la dirección de QB64 que citas, pero no lo llegué a entender porque no le preste atención. Ahora lo he analizado. Gracias. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Basic (en relación al último mes)
Gráfica de Basic

Recursividad o retroalimentación del ratón en QB64

Publicado por jose maria (6 intervenciones) el 16/08/2020 22:38:10
Entrego el pequeño programa modificado para que se entienda mejor y le sirva a alguien de referencia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SCREEN 9
principio:
LINE (200, 100)-STEP(100, 40), 15, B 'delimitar la area que el ratón puede recorrer
'
DO
    i = _MOUSEINPUT ' leer #1
    IF _MOUSEBUTTON(1) THEN EXIT DO 'se lee el primer click del botón izquierdo presionado, sin soltar
LOOP
'------------------------------
DO '                                            Necesita esperar
    i = _MOUSEINPUT '  leer #2                  hasta que el raton
LOOP UNTIL NOT _MOUSEBUTTON(1) '                se suelta. Este segundo click lee el valor y es el que vale
'------------------------------
IF _MOUSEX >= 200 AND _MOUSEX <= 200 + 100 AND _MOUSEY >= 100 AND _MOUSEY <= 100 + 40 THEN
    LOCATE 1, 1
    PRINT "Se ha hecho <click> en el rectangulo    ": SOUND 800, 1
ELSE LOCATE 1, 1: PRINT "No se ha hecho <click> en el rectangulo"
END IF
'
GOTO principio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursividad o retroalimentación del ratón en QB64

Publicado por Nacho (3 intervenciones) el 17/08/2020 11:12:50
¿Y funciona perfectamente?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 19
Ha aumentado 1 puesto en Basic (en relación al último mes)
Gráfica de Basic

Recursividad o retroalimentación del ratón en QB64

Publicado por jose maria (6 intervenciones) el 17/08/2020 13:07:37
Si. Funciona bien. Solo hay que acoplarlo a nuestro código de nuestros programas que tengamos. Introduciéndolo en bucles...While-wend , Do loop, etc...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar