Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: brunoxzx en Marzo 07, 2011, 04:12:21 AM

Título: por que no funciona
Publicado por: brunoxzx en Marzo 07, 2011, 04:12:21 AM
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.
Título: Re: por que no funciona
Publicado por: 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} ??
Título: Re: por que no funciona
Publicado por: 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???
Título: Re: por que no funciona
Publicado por: brunoxzx en Marzo 07, 2011, 04:40:00 AM
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
Título: Re: por que no funciona
Publicado por: Killer en Marzo 07, 2011, 05:11:45 AM
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.
Título: Re: por que no funciona
Publicado por: brunoxzx en Marzo 07, 2011, 05:22:35 AM
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]
Título: Re: por que no funciona
Publicado por: Killer en Marzo 07, 2011, 05:26:41 AM
Jaja, si perdona, no me fije que quer?as que volviera a 0 al llegar a 8, necesito leer con m?s cuidado :-[
Título: Re: por que no funciona
Publicado por: brunoxzx en Marzo 07, 2011, 05:42:54 AM
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.
Título: Re: por que no funciona
Publicado por: Killer en Marzo 07, 2011, 06:14:06 AM
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.
Título: Re: por que no funciona
Publicado por: brunoxzx en Marzo 07, 2011, 06:25:27 AM
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?
Título: Re: por que no funciona
Publicado por: Killer en Marzo 07, 2011, 07:35:36 AM
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.
Título: Re: por que no funciona
Publicado por: brunoxzx en Marzo 07, 2011, 07:47:29 AM
He much?simas gracias por todo lo que me has ayudado, me has sacado de muchas dudas.
Título: Re: por que no funciona
Publicado por: Wadk en Marzo 08, 2011, 05:25:15 AM
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.
Título: Re: por que no funciona
Publicado por: Killer en Marzo 08, 2011, 05:54:08 AM
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.
Título: Re: por que no funciona
Publicado por: Desko27 en Marzo 08, 2011, 06:18:11 AM
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
Título: Re: por que no funciona
Publicado por: brunoxzx en Marzo 08, 2011, 06:19:00 AM
Cierto wadk me hab?a olvidado por completo de "mod" ademas me agrada que le haga mas competencia al if que el anterior m?todo, y que si por alguna extra?a raz?n si sub_imagen llega a ser mayor que 8 siga funcionando.

EDIT: Al parecer alguien escribi? antes que yo
Título: Re: por que no funciona
Publicado por: Wadk en Marzo 08, 2011, 05:45:39 PM
Opino igual que Desko27. :)

Gracias por los datos, Killer.