Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Juanmoli111 en Agosto 24, 2017, 07:16:36 PM

Título: Error con cofres (Solucionado!)
Publicado por: Juanmoli111 en Agosto 24, 2017, 07:16:36 PM
Hola! estoy teniendo un pequeño problema con un proyecto y no entiendo como solucionarlo, me encantaría que me ayuden por que me permitiría seguir adelante con mi proyecto, muchas gracias :).
Aquí un video enseñando el error in-game y los códigos:
https://www.youtube.com/watch?v=2i7awuUV6bA&feature=youtu.be

De antemano muchísimas gracias por la ayuda que me puedan llegar a dar!
Título: Re:Error con cofres
Publicado por: 3dgeminis en Agosto 24, 2017, 07:39:36 PM
Video borrado  ???
Título: Re:Error con cofres
Publicado por: Zapdos43 en Agosto 24, 2017, 07:42:09 PM
El video no está disponible, mejor escribe el problema.
Título: Re:Error con cofres
Publicado por: Juanmoli111 en Agosto 24, 2017, 07:43:15 PM
Cita de: 3dgeminis en Agosto 24, 2017, 07:39:36 PM
Video borrado  ???
Prueba ahora  :-[
Título: Re:Error con cofres
Publicado por: Juanmoli111 en Agosto 24, 2017, 07:47:41 PM
Cita de: Zapdos43 en Agosto 24, 2017, 07:42:09 PM
El video no está disponible, mejor escribe el problema.
Ya lo puse en oculto en vez de privado  ???
Título: Re:Error con cofres
Publicado por: Zapdos43 en Agosto 24, 2017, 08:29:26 PM
Tú código funciona con todas las instancias del objeto Cofre. Para interactuar con una sola instancia del objeto Cofre debes conocer el ID de esa instancia.

(puedes buscar por google (o en este foro) la diferencia entre objeto e instancia, explicado de forma breve: las instancias son copias del objeto)

Las funciones instance_create, instance_nearest, instance_position, collision_line, collision_ ... devuelven el valor del ID. Por ejemplo:
[gml]
mi_variable = instance_create(x,y,objeto_cubo);
mi_variable.speed = 2;
//En este caso mi_variable tendrá el ID del objeto_cubo que he creado y a ese objeto_cubo le asigno un speed de 2.
[/gml]

En tu caso puedes usar collision_circle para detectar colisión con el objeto Cofre y así obtener su ID:
[gml]
if (condicion para comprobar si estoy cerca de una instancia del objeto Cofre)
{
    //entonces buscamos el ID de esa instancia
    ID_cofre = collision_circle(x,y,radio,objeto_cofre,false,false);
    if (ID_cofre) // si la variable tiene valor
    {
        // acciones para abrir el cofre y todo lo demás
     }
}
[/gml]
Título: Re:Error con cofres
Publicado por: Seirlord_Games en Agosto 24, 2017, 08:38:14 PM
A parte de la optimización que deberías meterle, por ejemplo no ponerle el random de oro en el step. Básicamente lo que le dices al código es que cambie la imagen de todos los cofres. Vas a hacer lo siguiente:

Evento create del cofre:

open=0;
abrir=0;
oro=irandom_range(0,7);


Evento Animation End del cofre(Esta en "other")

image_speed=0;


Evento Key Press ENTER del cofre:

if distance_to_object(obj_player)<15 {
    if (open) {
        show_message("Este cofre está vacío");
    } else {
        if oro=0 {
            show_message("No parece haber nada de oro en este cofre");
        } else {
            obj_player.dinero+=oro;
            show_message("Has obtenido "+string(oro)+" de oro");
            open=1;
            sprite_index=spr_cofreabriendose;
        }
    }
}


Con eso creo que te debería ir de perlas. Si te funciona no olvides darme un puntito  ;D
Título: Re:Error con cofres
Publicado por: Juanmoli111 en Agosto 24, 2017, 08:53:09 PM
Cita de: Seirlord_Games en Agosto 24, 2017, 08:38:14 PM
A parte de la optimización que deberías meterle, por ejemplo no ponerle el random de oro en el step. Básicamente lo que le dices al código es que cambie la imagen de todos los cofres. Vas a hacer lo siguiente:

Evento create del cofre:

open=0;
abrir=0;
oro=irandom_range(0,7);


Evento Animation End del cofre(Esta en "other")

image_speed=0;


Evento Key Press ENTER del cofre:

if distance_to_object(obj_player)<15 {
    if (open) {
        show_message("Este cofre está vacío");
    } else {
        if oro=0 {
            show_message("No parece haber nada de oro en este cofre");
        } else {
            obj_player.dinero+=oro;
            show_message("Has obtenido "+string(oro)+" de oro");
            open=1;
            sprite_index=spr_cofreabriendose;
        }
    }
}


Con eso creo que te debería ir de perlas. Si te funciona no olvides darme un puntito  ;D


Muchas gracias :)
El único problema que tenía era con las animaciones, pero modifiqué un poco las cosas y ya quedó de diez, gracias :3