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?.
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
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.
[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....
Para qué sirve el mouse.region??
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.
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
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)
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.