Saludos, estoy usando una ds_list para meter muchos sprites, con éste código los muestro todos(por ahora solo estoy haciendo la prueba con 10 sprites, pero el proyecto final contendrá al menos 50). Ahora lo que me gustaría hacer es detectar en que sprite se ha hecho clic para luego realizar alguna acción. Si necesitan más detalles por favor no duden en decirlo. Muchas gracias de antemano. :D
Evento Create:
listaSprites = ds_list_create();
ds_list_add(listaSprites, sprCabeza1, sprCabeza2, sprCabeza3, sprCabeza4, sprCabeza5, sprCabeza6,
sprCabeza7, sprCabeza8, sprCabeza9, sprCabeza10);
Evento Draw:
for(var i = 0; i < ds_list_size(listaSprites); i++){
draw_sprite_ext(ds_list_find_value(listaSprites, i), 0, x+posX, y+posY, xscale, yscale, image_angle, c_white, 1);
posX += 200;
if(i == 2) { posX = 36; posY += 128; } //PARA QUE SOLO SE MUESTREN 3 SPRITES DE FORMA HORIZONTAL
if(i == 5) { posX = 36; posY += 128; }
if(i == 8) { posX = 36; posY += 128;}
}
Podrías mostrar las imágenes de esta manera, para ahorrarte código y facilitar lo que quieres hacer:
[gml]
//tamaño de los sprites
ancho = 200;
alto = 128;
columnas = 3; //Número de sprites a mostrar horizontalmente
sClickeado = -1; //Sprite clickeado
for(var i = 0; i < ds_list_size(listaSprites); i++)
{
posY = floor(i/columnas)*alto;
posX = (i - floor(i/columnas)*columnas)*ancho;
draw_sprite(listaSprites[| i], x + posX, y + posY);
if(mouse_check_button(mb_left)) //Comprobar click
{
if(point_in_rectangle(mouse_x, mouse_y, x + posX, y + posY,x + posX+ancho, y + posY+alto))
{
sClickeado = i;
}
}
}
[/gml]
No lo he probado pero en teoría debería funcionar.
Muchas gracias NiuWeb, sólo tuve que hacer unos pequeños retoques para adaptarlo mejor a mis requisitos, pero funcionó de maravilla. Muchas gracias nuevamente. :D
Saludos nuevamente NiuWeb, ahora me encuentro con algo que le he estado dando un poco de vueltas y no encuentro como hacerlo. Como dije anteriormente, son al menos 50 sprites en total y no todos caben en la view que es de 720x1280. Entonces se me ha ocurrido hacer un efecto de swipe para bajar y ver los demás sprites, el detalle aquí es que no se me ocurre como hacer que los sprites que no estén en el area de mostrar sprites, no se dibujen. Espero que con ésta imagen puedas entender mejor lo que quisiera hacer. Gracias!
(http://i.imgur.com/OI95XdF.png)
Podrías usar una variable que diga desde dónde mostrar los sprites, y otra que diga cuántos sprites verticalmente podrás mostrar. Por ejemplo algo así:
[gml]
///Evento create
indice = 0;
max_vs = 6; //Mostrar 6 sprites verticalmente
[/gml]
Y el evento Draw lo modificarías algo así:
[gml]
///Evento Draw
max_ind = indice + max_vs + 1;
max_ind = min(ds_list_size(listaSprites), max_ind);
//tamaño de los sprites
ancho = 200;
alto = 128;
columnas = 3; //Número de sprites a mostrar horizontalmente
sClickeado = -1; //Sprite clickeado
for(var i = indice; i < max_ind; i++)
{
Yval = floor(i/columnas);
if(Yval >= max_vs) break; //Aquí se cierra el ciclo cuando se llega al límite vertical
posY = Yval*alto;
posX = (i - Yval*columnas)*ancho;
draw_sprite(listaSprites[| i], x + posX, y + posY);
if(mouse_check_button(mb_left)) //Comprobar click
{
if(point_in_rectangle(mouse_x, mouse_y, x + posX, y + posY,x + posX+ancho, y + posY+alto))
{
sClickeado = i;
}
}
}
[/gml]
A ver si funciona.
Gracias, ha funcionado, pero como haría para que cuando deslice hacia abajo con el dedo se muestren los demás sprite?
Súmale 1 a la variable indice para desplazar una casilla todos los sprites.