Autor Tema: determinar cuadrante segun posicion del mouse  (Leído 72 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ashe de Freljord

determinar cuadrante segun posicion del mouse
« en: Noviembre 18, 2018, 12:56:19 am »
Hola, estoy haciendo un inventario y para ello utilizo una ds_grid y quiero poder seleccionar un item cuando haga click con el mouse.

Tengo programada una version en la que utilizo un ciclo for anidado en otro ciclo for, lo que hace es ir determinando con point_in_rectangle, cada rectangulo generado en mi grilla de 4x5.

El problema es que al ser un ciclo dentro de otro, y estar constantemente chequeando la operacion de verificar un punto dentro del rectangulo, el juego se re tilda  XD osea, se puede jugar todavía pero el rendimiento baja considerablemente.

No quiero usar objetos para cada cuadrito, porque creo que no es la manera optima de hacer las cosas.


 
No Tienes Permisos Para Dar Puntos
point 10 Puntos

Usuarios que puntuaron el tema » Johann (10 Pts) 


Conectado NiuWeb

  • Sangheili Zealot.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2757
  • Mensajes: 1.655
  • Agradecido: 125 veces
  • Sexo: Masculino
  • Díselo al Covenant dijo el Jeilo verde.
    • Ver Perfil
Re:determinar cuadrante segun posicion del mouse
« Respuesta #1 en: Noviembre 18, 2018, 02:26:01 am »
No necesitas utilizar ciclos anidados. Basta con un cálculo sencillo para saber en qué celda está el mouse:
///EVENTO MOUSE PRESSED O ALGO ASÍ XD

//Las coordenadas en la habitación en las que se dibuja el inventario
//(ezquina superior izquieda del inventario)
var xinit, yinit; //Asígnales el valor que sea necesario

//Tamaño de las celdas
var cellw, cellh; //Asígnales el valor que sea necesario

//Cantidad de celdas (horizontal y verticalmente)
var cellwnum, cellhnum;  //Asígnales el valor que sea necesario

//Tamaño total del inventario
var gridw = cellwnum * cellw;
var gridh = cellhnum * cellh;

//Posición del mouse con respecto al inventario
var mousedx = mouse_x - xinit;
var mousedy = mouse_y - yinit;

//Comprobar que el mouse esté dentro del inventario
if point_in_rectangle(mousedx, mousedy, 0, 0, gridw, gridh) {
    //Convertir las coordenadas en la pantalla a coordenadas dentro el inventario
    //(coordenadas de celda)
    mousedx = floor( mousedx / cellw );
    mousedy = floor( mousedy / cellh );

    //Esas dos variables ahora indican la celda en la que se hizo clic
}
-Sólo había una nave.
-¿Una? ¿Estás seguro?.
-Sí, la llamaban The Pillar Of Autumn.

BA:STFW&RTFM
 
Los siguientes usuarios dieron las gracias a este tema: Johann, Ashe de Freljord, Goganpis


Desconectado Ashe de Freljord

Re:determinar cuadrante segun posicion del mouse
« Respuesta #2 en: Noviembre 18, 2018, 05:37:33 am »
Gracias! la verdad estupenda idea, no se me ocurria hacerlo de otra manera
funcionó 10 puntos