Junio 05, 2014, 05:10:43 PM Ultima modificación: Junio 05, 2014, 10:33:19 PM por Marth
En el archivo que adjunto, tenemos un objeto que incluye un evento que al presionar una tecla crea un nuevo objeto dotándolo de una determinada velocidad angular, para lo cual uso una función del game maker. Todo funciona perfectamente, pero me gustaría saber si existe alguna función del Lenguaje Game Maker que sustituya a esa función (la única del programa que no usa GML).

De hecho, ¿existe alguna función que permita crear un objeto y dotarle de alguna variable hay mismo?

Eso sería útil por ejemplo para que haya 2 objetos A y B. Ambos pueden crear un objeto Z, pero si lo crea A, ese objeto tendra hspeed=5, mientras que si lo crea B, ese objeto tendra vspeed=-7.

Cita de: Marth en Junio 05, 2014, 05:10:43 PM
De hecho, ¿existe alguna función que permita crear un objeto y dotarle de alguna variable hay mismo?

No existe una pero sí hay un método para crearla según tus necesidades: SCRIPTS.


/*
Nombre: marth_create
argument0: Objeto de la instancia a crear
argument1: Coordenada x
argument2: Coordenada y
argument3: Velocidad de la instancia
argument4: Dirección del movimiento
Descripción: Script para crear una instancia de un objeto con una velocidad determinada. Debe llamarse en un evento de tecla
Ejemplo: marth_create(obj_bala, 50, 100, 7, 30)
*/
var obj, xx, yy, vel, dir, i_d;
obj = argument0
xx = argument1
yy = argument2
vel = argument3
dir = argument4

i_d = instance_create(xx, yy, obj)
i_d.speed = vel
i_d.direction = dir


Las variables var no son necesarias crearlas, puedes usar los argumentos directamente, pero ayudan a que el script sea más comprensible

Gracias, ha funcionado correctamente.
Supongo que voy a tener que irle cogiendo el tranquilo a esto de los scripts si quiero ir progresando con Game Maker.

Buenas, me ha parecido interesante ya que estoy aprendiendo de momento.
El tema es el siguiente.
Por lo que veo en el ejemplo de función marth_create usa métodos, argumentos o propiedades (perdonad pero no domino aún la jerga de Game Maker) propios de Game Maker pero podría por ejemplo añadir un argumento más para alguna propiedad "inventada", por ejemplo tiempoDeVida por poner un ejemplo.

Muchas gracias

Cita de: empardopo en Junio 06, 2014, 07:29:07 AM
Por lo que veo en el ejemplo de función marth_create usa métodos, argumentos o propiedades (perdonad pero no domino aún la jerga de Game Maker) propios de Game Maker pero podría por ejemplo añadir un argumento más para alguna propiedad "inventada", por ejemplo tiempoDeVida por poner un ejemplo.

Sí, por supuesto, el argumento puede ser cualquier valor  (o variable de usuario), claro que dentro del script tú tendrías que hacer lo necesario para darle un uso coherente a ese valor.

Sí pero lo que no termino de pillar es si por ejemplo me creo varias instancias por ejemplo de un objeto llamado obj_enemigo.
a) por lo que dices podría acceder a algo como obj_enemigo.tiempoDeVida desde cualquier punto del programa/juego?
b) cómo podría hacerlo individualmente a cada instancia. Imaginemos que he creado dos obj_enemigo.

Muchas gracias y perdona mi ignorancia.

Nota: Si tienes algún fuente/ejemplo donde se pueda ver mejor y así investigo.

Que recuerde, un script solo admite hasta 5 valores de entrada, por lo que en este ya no es posible meterle más valores.
Si quisiéramos que se acabe destruyendo el objeto, lo mejor sería dejarlo a eventos como "outside room".

Los scripts permiten hasta 16 argumentos, no solo 5.

Puedes usar obj_enemigo.variable en el momento que quieras, pero solo tendra efecto en las instancias existentes, no puedes crear cambios en instancias que aún no han sido creadas.

Si existen varias instancias de obj_enemigo y se utiliza obj_enemigo.vida = 6, el cambio se dará en todas las instancias existentes de obj_enemigo, para hacer cambios en instancias especificas se necesita la ID de la instancia, por eso el script de Penumbra usa la variable i_d.

Varias funciones regresan la ID de las instancias, la función instance_create retorna la ID de la instancia recién creada, instance_nearest la ID de la más cercana al punto especificado, instance_furthest la de la más lejana, instance_find la de la instancia n, instance_position la ID de la instancia en el punto especificado, la familia de funciones collision_ retorna la ID de la primera instancia encontrada en la zona especificada.

Similarmente, cuando se colocan objetos en el room desde el editor se les puede dar click derecho sobre ellos y elegir la opción Creation Code, que permitirá agregar código específico para esa instancia que se ejecutará después del evento create.

¿16 variables? Si solicitas el script desde su función, solo te permiten hasta 5 argumentos, aunque supongo que si se hace desde el GML, si que se podrá hasta 16.
Hablo desde propia experiencia, y cuando uso un script con la función del Game Maker, solo me opción para hasta 5 argumentos.

Creo recordar que en D&D sí hay límite de 5 argumentos, una razón mas para usar GML en lugar de D&D

Explicación cojonuda Killer!
Muchas gracias a todos por los apuntes.