Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Octubre 27, 2015, 03:38:14 PM

Título: [Solucionado] with (varias instancias)
Publicado por: kostra en Octubre 27, 2015, 03:38:14 PM
Una pregunta simple y clara. hay alguna manera de poner referencias a varias instancias a la vez en un solo with sin tener que poner mil "withs"

por ejemplo with (inst1,inst2,inst3...)

En el caso de que sí se pueda, diganme cómo es la buena sintaxis, y si no, pues no, me aguanto y a poner mil xD

Grachie :B
Título: Re:with (varias instancias)
Publicado por: julianxx9 en Octubre 27, 2015, 04:09:19 PM
iras a poner mil por que intente hacerlo con "or" y "and" y solo ejecuta el codigo en un solo objeto, pero puedes usar un script y solo haces el llamado de ese script por ejemplo en el script

with(argument0)
{
    hspeed=4;
}


ya queda hacer el llamado del script. Ese metodo es para ahorrar  lineas de codigos  y sea mas practico, ademas de que se estaria reciclando la lineas
Título: Re:with (varias instancias)
Publicado por: kostra en Octubre 27, 2015, 04:54:44 PM
por muhcho que haga un script, he de ponerlo miles de veces igual jajaja, gracias de todos modos, me toca lo que me toca jeje :B
Título: Re:with (varias instancias)
Publicado por: Clamud en Octubre 27, 2015, 05:02:27 PM
Sólo se puede usar un argumento dentro de un with.

Una solución es crear un objeto padre que englobe todos los objetos que quieres modificar, pero recuerda que afectará a todas las instancias definidas con esos objetos.

Sí sólo quieres modificar a determinadas instancias podrías guardar sus ids en algún arreglo o estructura de datos (list, stack, queue). Después se pueden usar muchas variantes de código:

[gml]
with( all )
{
    if ds_list_find_index( lista, id ) >= 0
    {
        //acciones...
    }
}
[/gml]

el código anterior se puede optimizar con un ciclo for
[gml]
for( i=0; i<ds_list_size(lista); i+=1 )
{
    with lista[| i]
    {
        //acciones...
    }
}
[/gml]

si quieres borrar los ids conforme pasan por el with puedes usar este método
[gml]
while ds_queue_size( queue ) > 0
with ds_queue_dequeue( queue )
{
    //acciones...
}
[/gml]
Título: Re:with (varias instancias)
Publicado por: kostra en Octubre 27, 2015, 07:00:29 PM
vale muchas gracias, igual, ya lo tengo más o menos solucionado, hacer un script, al final si me sirvió de algo, ya lo tengo más o menos bien ordenadito, muchas gracias a todos, anoto el solucionado :)
Título: Re:[Solucionado] with (varias instancias)
Publicado por: DarkKRuleR en Octubre 27, 2015, 09:10:12 PM
Creo que si necesitas usar un with para muchas instancias, el problema es de diseño. Todas ellas deberían tener un parent en común, necesitando un solo with. Por ejemplo, si es un with para todos los objetos enemigos, sólo deberías hacer un with(obEnemigoParent), siendo ese el parent de todos los enemigos
Título: Re:[Solucionado] with (varias instancias)
Publicado por: bygdle en Noviembre 29, 2015, 06:43:12 AM
Bueno, el tema dice solucionado pero igual aporto mi code...xD
Puedes crear tu code en un script y otro script que leerá los objetos que le diste como argumentos y ejecutará el otro script, así
[Gml]
//Script: ejecutar(obj)
n=argument_count;
for(i=0;i<n;i++)
{
with (argument) myscript();
}
[/gml]


Y ya luego lo ejecutas así
[Gml]
Ejecutar(obj1,obj2,obj3...)
[/gml]
Título: Re:[Solucionado] with (varias instancias)
Publicado por: kostra en Noviembre 29, 2015, 01:52:47 PM
ya ni recuerdo para qué era lo que pregunto en este post xDD

de igual manera, muchísimas gracias niu, no conocía la función argument_count xD me servirá en el futuro :D