Problemas con el puntero

Started by Yawin, December 15, 2010, 04:41:37 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Yawin

Esta vez vuelvo con un problema que definitivamente no se solucionar.

Me explico:
En el juego de estrategia que estoy haciendo, el mapa no es de 640x480. No. Es mucho más grande. Para ello tengo un scroll y todo se pinta sobre el scroll.

¿Qué me ocurre? Pues que si el puntero lo pinto referente a la pantalla, cuando subo el raton, el puntero sube, y si el scroll se desplaza, el puntero no se desplaza con el. Pero, en ese caso, no puedo pinchar sobre nada porque mis coordenadas son diferentes a las de las cosas que están sobre el scroll.
Pero si pinto el puntero sobre el scroll, entonces, se me desplaza con el scroll. Porque el moues.x es referente a la ventana. No referente al scroll. ¿Qué puedo hacer?.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Noivern

#1
Pues casi sin haber trabajado cosas en scroll y cámara, se me ocurre esto:
Pintalo referente a la pantalla y crea variables xraton e yraton que contengan la "posicion" del ratón referente al scroll (tienes que calcular esto según la posición en pantalla y el desplazamiento del ratón) y al hacer click debes revisar estas variables y no las propias del mouse.

Edit:
mmm pensando bien, con esto luego te saldra el problema que al llegar a los bordes de pantalla con el raton, el scroll no se moverá más. Seguiré pensando  ;D

Yawin

Eso ya se me había ocurrido, pero estoy convencido de que tiene que haber una forma más sencilla xD
y no s eme ocurre cual.

A parte, no se hacer eso xD Todavía no.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk

#3
[code language="bennu"]
if ( mouse.x<35 && mouse.region==1 && scroll.x0!=0 )
               scroll.x0-=4;
            end
            if ( mouse.x<10 && mouse.region==1 )
                  mouse.x=10;
            end
            if ( mouse.y<125 && mouse.region==1 && scroll.y0!=0 )
               scroll.y0-=4;
            end
            if ( mouse.y<100 && mouse.region==1 )
                  mouse.y=100;
            end
            if ( mouse.x>985 && mouse.region==1 && scroll.x0+1000!=nivel.ancho[0] )
               scroll.x0+=4;
            end
            if ( mouse.x>1010 && mouse.region==1 )
               mouse.x=1010;
            end
            if ( mouse.y>875 && mouse.region==1 && scroll.y0+800!=nivel.alto[0])
               scroll.y0+=4;
            end
            if ( mouse.y>900 && mouse.region==1 )
                  mouse.y=900;
            end
            editor.mox=mouse.x+scroll.x0-diferenciax;
            editor.moy=mouse.y+scroll.y0-diferenciay;



[/code]
yo tengo esto para el editor,diferenciax y diferenciay son el grosor que hay entre el borde de la pantalla y la ventana de edicción.el 1000 es el ancho de la ventana de edicción y el 800 la altura de la misma...nivel.alto/ancho es la anchura del nivel,vamos del scroll....lo puedes adaptar si quieres....

Yawin

Para qué sirve el mouse.region??
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DjSonyk

Quote from: yawin on December 15, 2010, 07:09:21 PM
Para qué sirve el mouse.region??
Le indicas en que region definida con define_region(),quieres que se vea el cursor por defecto en la region 0,toda la pantalla.

Yawin

La verdad, creo que ultimamente ando espeso. Creo que lo voy a dejar por hoy. Mañana lo vuelvo a mirar. Que creo que hay algo que debería entender y no entiendo xD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Noivern

en este rato se me ocurrió como seria el calculo:
si el puntero esta dentro de la pantalla, pero NO en los pixeles del borde, debes actualizar la xraton e yraton segun la diferencia con la posicion anterior, no asignar directamente el valor de mouse.x o mouse.y
Si el raton se encuentra en los bordes, osea el primer y ultimo pixel de tu resolucion, le sumas o restas a xraton o yraton una cantidad fija ¿se entiende?

entonces si tu mouse parte en mouse.x=320 e mouse.y=240, entonces xraton la inicias en 320 e yraton la inicias en 240.
Cuando muevas el mouse, debes dejar almacenada su ultima coordinada en OTRAS variables auxiliares, para hacer la comprobación y luego sumar la diferencia. Si estas en el borde, simplemente le sumas (o restas, segun el borde) una cantidad fija a la xraton o yraton, ya que la diferencia con la posicion anterior será 0. (ej: si ultimo pixel de x es 639, entonces si mantienes el raton en esa posicion, mueves el scroll y le sumas la misma cantidad de pixeles que mueves el scroll al xraton y asi vas almacenando la posicion del raton como si estuviese dentro del scroll, para poder usar esos valor al iniciarse el evento click y comprobar que hay en esa posicion en el scroll)

Drumpi

A ver, no os compliqueis:

Creo que a collision le da igual la posición del scroll.
Pero si quieres saber las coordenadas del puntero del ratón respecto al scroll sólo debes hacer:

coordenada_x=mouse.x+scroll[ 0 ].x0;
coordenada_y=mouse.y+scroll[ 0 ].y0;

Ya que scroll[0].x0 y scroll[0].y0 indican el desplazamiento del pixel superior izquierdo de la pantalla.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)