Marzo 07, 2011, 04:12:21 AM Ultima modificación: Marzo 07, 2011, 04:51:27 AM por brunoxzx
Pues es una pregunta simple por que no funciona este codigo
[gml]sub_imagen=(sub_imagen+1)*sub_imagen<8[/gml]
Seg?n yo el c?digo deber?a de sumar uno a sub_imagen y cuando llegue a 8 el valor volver? a ser 0, pero no sub_imagen se queda en 1 todo el tiempo.

Podria resolver el problema usando un simple if pero la verdad preferir?a no usarlo por razones personales y peleas con mi otro yo.

Que es eso? No ser?a mejor as?: image_index+=1 y en step, if image_index=8{image_index=0} ??

depende en que parte lo hallas puesto es c?digo y en cuanto a esta expresi?n "*sub_imagen<8" es una expresi?n booleana???
La cosa es que,.... no tengo la menor idea.

http://matuxgames.blogspot.com/

#3 Marzo 07, 2011, 04:40:00 AM Ultima modificación: Marzo 07, 2011, 04:51:47 AM por brunoxzx
Cita de: Masterkey en Marzo 07, 2011, 04:24:39 AM
Que es eso? No ser?a mejor as?: image_index+=1 y en step, if image_index=8{image_index=0} ??
no quiero usar if por problemas con mi otro yo.
Cita de: MatuX en Marzo 07, 2011, 04:28:45 AM
depende en que parte lo hallas puesto es c?digo y en cuanto a esta expresi?n "*sub_imagen<8" es una expresi?n booleana???
si, si es una expresi?n booleana

Prueba con esto:

[gml]sub_imagen=sub_imagen+1*(sub_imagen<8)[/gml]

Con el anterior estabas checando si (sub_imagen+1)*sub_imagen era menor a 8.

Gracias killer tenias raz?n aunque tu c?digo dejaba la subimagen en 8 por que lo que hacia era multiplicar 1*(sub_imagen es menor a 8 ) y luego sumarle image_index (creo), pero lo repare poni?ndolo as?.

[gml]sub_imagen=(sub_imagen+1)*(sub_imagen<8)[/gml]

Jaja, si perdona, no me fije que quer?as que volviera a 0 al llegar a 8, necesito leer con m?s cuidado :-[

De cualquier modo muchas gracias 8), y otra pregunta rapida, ?si es un metodo mas rapido usar valores booleanos para estas cosas que usar ifs? de cualquier modo no lo hago por velocidad si no por que me parece algo mas organizado, claro que si es mas lento de vez en cuando si usare ifs.

Si te soy sincero no he hecho pruebas de velocidad con esto, pero no es dif?cil de probar, dame un segundo y lo pruebo...

Resultado: los ifs son mas r?pidos, pero la diferencia es ?nfima, se necesitaron diez mil repeticiones para conseguir una diferencia de tiempo de 30 milisegundos

En todo caso yo tambi?n prefiero usar valores booleanos.

#9 Marzo 07, 2011, 06:25:27 AM Ultima modificación: Marzo 07, 2011, 06:32:05 AM por brunoxzx
hum pens? que era mas r?pido as?  :-\ y yo ya con mis diversos codigos booleanos (bueno ni tan booleanos).
[gml]hvel+=max(-0.5,min(0.5,dir*4*grav_y-hvel))*abs(grav_y)
hspeed+=(keyboard_check(vk_up)*-8)*(!place_free(x+grav_x,y+grav_y))*grav_x
image_xscale=(dir+(image_xscale*(dir==0)))*sign(grav_x+grav_y)[/gml]

Pero la verdad no importa creo que seguir? con este m?todo, ?como le haces para saber cual es mas r?pido?

Usando la funci?n current_time, que regresa el n?mero de milisegundos transcurridos desde que inicio el sistema.

Simplemente guarda dicho tiempo en una variable antes de probar lo que quieras, y luego restalo al tiempo luego de la prueba para conseguir un aproximado de que tanto tardo en ejecutarse. Debido a que distintos factores afectan el resultado es mejor realizar las pruebas varias veces para contar con un promedio.

Tambi?n a tener en cuenta es que normalmente lo que quieras probar se ejecutar? en menos de los 10 milisegundos a los que redondea current_time, por eso se deben realizar varias repeticiones antes de probar el tiempo para conseguir resultados que realmente puedas usar.

He much?simas gracias por todo lo que me has ayudado, me has sacado de muchas dudas.

Ya s? que el tema ya est? solucionado, pero ?no es m?s f?cil as??
[gml]sub_imagen = (sub_imagen + 1) mod 8;[/gml]
As? si llega a 8 vuelve a 0, y adem?s si llega a 9 queda en 1, etc.
No s?, tal vez incluso sea m?s r?pido.
Vim.

Vale la pena probar...

Kudos Wadk, en teor?a el if es aparentemente m?s r?pido que tu m?todo, pero la diferencia es tan ?nfima que bien podr?an ser igual de r?pidos, en 3200000 repeticiones el if toma una ventaja inferior a los 100 milisegundos, y ambos le aventajan al m?todo con el valor booleano casi un segundo completo.

Qu? interesante. Ya que la diferencia es tan m?nima, por un tema de claridad, yo usar?a el m?todo de Wadk, de hecho es el primero que me viene a la mente para hacer algo as?. Pero ya es algo personal, en programaci?n hay tantas formas de hacer las cosas... que entra perfectamente el factor del gusto sin estorbar o entrometerse necesariamente en el rendimiento, as? que, al fin y al cabo, que el amigo utilice lo que m?s le agrade.

Muchas gracias por los datos Killer :)
Saludos xD