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
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
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...
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
?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]
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
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 ?
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 :/
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!
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 (:
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!
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
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);
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)