Octubre 27, 2015, 03:38:14 PM Ultima modificación: Octubre 27, 2015, 07:01:51 PM por kostra
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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

#1 Octubre 27, 2015, 04:09:19 PM Ultima modificación: Octubre 27, 2015, 04:13:21 PM por julianxx9
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

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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

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]

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 :)
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

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

#6 Noviembre 29, 2015, 06:43:12 AM Ultima modificación: Diciembre 30, 2015, 03:30:21 AM por NiuWeb
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]
alaberga regué el café.

BA:STFW&RTFM

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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]