Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Yawin on December 15, 2010, 04:41:37 PM

Title: Problemas con el puntero
Post by: Yawin on December 15, 2010, 04:41:37 PM
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?.
Title: Re: Problemas con el puntero
Post by: Noivern on December 15, 2010, 05:17:29 PM
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
Title: Re: Problemas con el puntero
Post by: Yawin on December 15, 2010, 06:40:51 PM
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.
Title: Re: Problemas con el puntero
Post by: DjSonyk on December 15, 2010, 07:00:43 PM
[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....
Title: Re: Problemas con el puntero
Post by: Yawin on December 15, 2010, 07:09:21 PM
Para qué sirve el mouse.region??
Title: Re: Problemas con el puntero
Post by: DjSonyk on December 15, 2010, 07:24:09 PM
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.
Title: Re: Problemas con el puntero
Post by: Yawin on December 15, 2010, 07:31:54 PM
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
Title: Re: Problemas con el puntero
Post by: Noivern on December 15, 2010, 07:32:48 PM
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)
Title: Re: Problemas con el puntero
Post by: Drumpi on December 15, 2010, 08:16:09 PM
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.