Comunidad Game Maker

Ayuda => Desarrollo de Scripts => Mensaje iniciado por: Texic en Septiembre 30, 2010, 09:56:37 PM

Título: sprite_get_index
Publicado por: Texic en Septiembre 30, 2010, 09:56:37 PM
Creador: Yo-Wadk

Version de GM utilizada:  :GM8:

Tambi?n es compatible con  :GM7: :GM6: y probablemente  :GM5:

Descripcion:
CitarEste script b?sicamente saca el ?ndice de un sprite mediante un string que contenga su nombre. De no encontrarlo devuelve -1. En lo posible traten de que el sprite exista para mejorar el rendimiento del script, ya que hasta que encuentra el sprite recorre 1000 para encontrarlo. En el ejemplo ver?n que el rendimiento no se ve afectado por un simple while de 1000, pero para juegos pesados podr?a resultar inconveniente usar este script en step sobre sprites inexistentes. Esto para mi script, el de Wadk funciona diferente

sprite_get_index (mio)
[gml]z=0
zz=-1
while z<>-1 and z<1000
{
if sprite_get_name(z)=argument0 {zz=z z=-1}
else {z+=1}
}
return zz[/gml]

o

sprite_get_index (Wadk)
[gml]execute_string("return "+argument0);[/gml]

Ejemplo:[gml]sprite_index=sprite_get_index("sprite2")[/gml]

Dejo un adjunto para que vean el funcionamiento de ambas, remarco un par de diferencias. La de Wadk es rapid?sima, a diferencia de la m?a. Pero cuando la sprite no existe da error, a menos que:
A - Desactiven los mensajes de error
B - Activen el "treat uninitialized variables as 0", en ?ste ?ltimo no va a devolver -1 al no encontrar la sprite, sino que devuelve 0

Por eso es q dejo las dos. Bueno, espero que les guste alguna XD
Título: Re: sprite_get_index
Publicado por: brunoxzx en Septiembre 30, 2010, 11:00:57 PM
de haber sabido de la existencia de sprite_get_name esto no me habr?a pasado XD (deb? de buscar mas afondo en el manual)

????GRACIASSSSS ME AHORASTE MUCHOS PROBLEMAS!!!!

edit: me funciono a la perfecci?n
Título: Re: sprite_get_index
Publicado por: Wadk en Octubre 01, 2010, 01:37:54 AM
No te quiero joder, pero hay una forma m?s f?cil...
[gml]execute_string("a=nombre_del_sprite");[/gml]

Tambi?n est? esta opci?n, que me parece m?s sencilla, pero no estoy seguro de si funciona:
[gml]a=execute_string("nombre_del_sprite");[/gml]

Y tambi?n, el script se puede optimizar usando s?lo un for (amo los for :P):
[gml]var z;
for(z=1000;sprite_get_name(z)!=argument0 && z>-1;z-=1){
    // Nada :P
}
return z;[/gml]
Aunque no estoy seguro de si funcionar?a porque nunca prob? usar una condici?n as? en un for, no se si el GM lo permite (en C/C++ se puede XD). No puedo usar el GM para confirmarlo...
Título: Re: sprite_get_index
Publicado por: Texic en Octubre 01, 2010, 01:41:51 AM
Pues obviamente no se me hab?a ocurrido XD
Ahora la cambio, me fijo cu?l funciona mejor (de las tuyas, esta claro q la m?a no est? optimizada)
EDIT: Listo, ya ta
Título: Re: sprite_get_index
Publicado por: Wadk en Octubre 01, 2010, 01:59:35 AM
?Seguro que mi c?digo es m?s r?pido? Yo no lo asegurar?a :P La funci?n execute_string tiene fama de ser m?s bien lenta.

Y la versi?n con el for, ?no funciona? :/
Ac? una alternativa que deber?a funcionar:
[gml]var z;
for(z=1000;z>-1;z-=1){
    if sprite_get_name(z)==argument0{
        break;
    }
}
return z;[/gml]
Título: Re: sprite_get_index
Publicado por: Texic en Octubre 01, 2010, 02:06:19 AM
Claro que est? bien, pero empieza en 1000 y termina en -1, esa es la parte que no me convence. Normalmente no se llega ni a las 300 sprites (En mi caso particular). Supone m?s esfuerzo y recorrido llegar desde 1000 a 300 que desde 0 a 300, estaba pensada para ser m?s r?pida en ese sentido
Título: !
Publicado por: brunoxzx en Octubre 01, 2010, 02:14:52 AM
WTF !!! existe la funcion execute_string!!!! busque algo parecido durante horas!!!!
y aparte de todo me dijeron que no se pod?a lo que quer?a!!!


por cierto texic poner z=<>-1 es lo mismo que !z=-1 ?
Título: Re: sprite_get_index
Publicado por: Wadk en Octubre 01, 2010, 02:35:30 AM
Cita de: brunoxzx en Octubre 01, 2010, 02:14:52 AM
WTF !!! existe la funcion execute_string!!!! busque algo parecido durante horas!!!!
y aparte de todo me dijeron que no se pod?a lo que quer?a!!!


por cierto texic poner z=<>-1 es lo mismo que !z=-1 ?
S?, existe, pero no te recomiendo que la uses mucho. Como dije, es lenta.
z=<>-1 dar?a error (seguramente). Si te refer?s a z<>-1, no es lo mismo que !z=-1, es lo mismo que z!=-1.

@Texic: Es cierto, no pens? en eso.
Entonces as?:
[gml]var z;
for(z=0;z<1000;z+=1){
    if sprite_get_name(z)==argument0{
        return z;
    }
}
return -1;[/gml]


En cualquier caso, hacer esto no es la mejor de las ideas en realidad :/
Título: Re: sprite_get_index
Publicado por: brunoxzx en Octubre 01, 2010, 03:39:23 AM
MMM disculpa pero creo que !z=-1 y z!=-1 son exactamente lo mismo.

y en el tema del script realmente no me importa la velocidad, lo necesito en create y junto a un proceso que tarda muuucho mas!  
Título: Re: sprite_get_index
Publicado por: Wadk en Octubre 01, 2010, 03:50:53 AM
No, no lo es. !(z=-1) si es lo mismo que z!=-1, pero si pon?s !z=-1 est?s negando z y comparando el resultado de dicha negaci?n con -1. Al negar un entero, el resultado ser? 1 o 0, nunca otro n?mero. !z=-1 siempre devolver? false (o un error si z es un string, supongo).

A no ser, claro, que la memoria me falle (:
Título: Re: sprite_get_index
Publicado por: brunoxzx en Octubre 01, 2010, 04:30:58 AM
AHH si disculpa  ???  :-[ mi error si ya record? que era haci !(a=-1) y de echo ya hab?a comprobado antes lo de que que se niega Z y se compara con -1 XD disculpa!
Título: Re: sprite_get_index
Publicado por: Texic en Octubre 02, 2010, 04:36:49 AM
Demostrado, tu c?digo 5000 veces por segundo Wadk da 2 fps, el mio seg?n la cantidad de sprites que tenga que recorrer el while, pero en circunstancias normales gana el tuyo por bastante
Título: Re: sprite_get_index
Publicado por: Wadk en Octubre 02, 2010, 09:29:07 PM
Ya veo.

Bueno, ?ltima cosa, en el m?o deber?as agregar la l?nea var a; al principio, y en el tuyo deber?as agregar zz en el var.
O mejor, creo que en el m?o podr?as poner directamente execute_string("return "+argument0);
Título: Re: sprite_get_index
Publicado por: Texic en Octubre 02, 2010, 09:51:38 PM
Wow, ahora a 10000 veces por step da 5-6 fps (Quiz?s se deba tambi?n a que mi pc est? m?s liviana que cuando lo prob? la otra vez)