Agosto 24, 2017, 07:16:36 PM Ultima modificación: Agosto 24, 2017, 08:53:43 PM por Juanmoli111
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!


El video no está disponible, mejor escribe el problema.


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ú 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]

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

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