Mayo 13, 2017, 06:10:18 PM Ultima modificación: Mayo 13, 2017, 06:29:35 PM por Tigerito019
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;}
        }

¿Te gustaría crear un videojuego multijugador en línea con GameMaker Studio? Si la respuesta es afirmativa, estás leyendo la firma correcta ;). Visita mi curso alojado en Udemy en el cual enseño a desarrollar uno de manera clara, precisa y simplificada, ¡Échale un vistazo!

https://www.udemy.com/desarrollo-de-juegos-multijugadores-en-linea-con-gamemaker-y-python-3/

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.
alaberga regué el café.

BA:STFW&RTFM

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
¿Te gustaría crear un videojuego multijugador en línea con GameMaker Studio? Si la respuesta es afirmativa, estás leyendo la firma correcta ;). Visita mi curso alojado en Udemy en el cual enseño a desarrollar uno de manera clara, precisa y simplificada, ¡Échale un vistazo!

https://www.udemy.com/desarrollo-de-juegos-multijugadores-en-linea-con-gamemaker-y-python-3/

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!



¿Te gustaría crear un videojuego multijugador en línea con GameMaker Studio? Si la respuesta es afirmativa, estás leyendo la firma correcta ;). Visita mi curso alojado en Udemy en el cual enseño a desarrollar uno de manera clara, precisa y simplificada, ¡Échale un vistazo!

https://www.udemy.com/desarrollo-de-juegos-multijugadores-en-linea-con-gamemaker-y-python-3/

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.
alaberga regué el café.

BA:STFW&RTFM

Gracias, ha funcionado, pero como haría para que cuando deslice hacia abajo con el dedo se muestren los demás sprite?
¿Te gustaría crear un videojuego multijugador en línea con GameMaker Studio? Si la respuesta es afirmativa, estás leyendo la firma correcta ;). Visita mi curso alojado en Udemy en el cual enseño a desarrollar uno de manera clara, precisa y simplificada, ¡Échale un vistazo!

https://www.udemy.com/desarrollo-de-juegos-multijugadores-en-linea-con-gamemaker-y-python-3/

Súmale 1 a la variable indice para desplazar una casilla todos los sprites.
alaberga regué el café.

BA:STFW&RTFM