Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: yokaiworld en Febrero 06, 2014, 04:34:33 AM

Título: ayuda con sentencia RETURN
Publicado por: yokaiworld en Febrero 06, 2014, 04:34:33 AM
Hola leyendo el manual del game maker dice que que los script pueden expresar valores para lo cual se utiliza la sentencia RETURN

Return (expresion)

pero luego dice:
La ejecucion del script termina en la sentencia return

Alguno de ustedes que tienen experiencia con game maker pueden darme un ejemplo  de como utilizarlo, es que el ejemplo del manual es demasiado simplon.

Veran estoy utilizando un script en una accion de un enemigo pero esta se realiza infinitamente y no se como pararla, gracias
Título: Re:ayuda con sentencia RETURN
Publicado por: Mega G en Febrero 06, 2014, 02:41:42 PM
Voy a ponerte varios ejemplos.

Puedes hacer un script que sume 2 números y retorne el resultado de la suma:

Vamos a llamarlo suma y tendrá 2 parámetros, que son los 2 números que tiene que sumar.
return argument0+argument1

Entonces si por ejemplo pones el código en algún objeto del juego:
resultado=suma(4,5)

Entonces la variable resultado valdrá 4+5=9.



Ahora otro ejemplo, que es un poco diferente del primero.
Este sería el script, que llamaremos get_dia_semana:


if current_weekday=0 { return "Domingo"; } else
if current_weekday=1 { return "Lunes"; } else
if current_weekday=2 { return "Martes"; } else
if current_weekday=3 { return "Miércoles"; } else
if current_weekday=4 { return "Jueves"; } else
if current_weekday=5 { return "Viernes"; } else
if current_weekday=6 { return "Sábado"; }



Entonces si en un código pones:
show_message(get_dia_semana())
Te saldrá un mensaje con el día de la semana.


Espero que te haya servido, saludos!
Título: Re:ayuda con sentencia RETURN
Publicado por: Iros en Febrero 06, 2014, 04:38:34 PM
Agrego algo que aprendí programando en PHP, C++ y Java xD

La sentencia Return lo único que hace (únicamente en las funciones, en este caso scripts) es devolver un resultado dentro de un script, es decir que lo que dice el manual está bien eso de que al usarse se termina con el ciclo del script ya que, en teoría, si pusimos return quiere decir que ya no tenemos más script que ejecutar y por ende queremos saber en que quedó nuestra ejecución del script, es decir que retornaría a su llamado (cuando llamamos al script desde nuestro objeto) con lo que lo programamos para que retorne como es en los ejemplos del amigo Mega G.

Con respecto al ejemplo de los días, me parece algo erróneo utilizar múltiples return, en su lugar yo usaría una variable var y un switch para optimizar el código y luego retornaría a la variable:

[gml]
var day;

switch (current_weekday) {
      case 0:
             day = "Domingo";
      break;
      case 1:
             day = "Lunes";
      break;
      case 2:
             day = "Martes";
      break;
      case 3:
             day = "Miercoles";
      break;
      case 4:
             day = "Jueves";
      break;
      case 5:
             day = "Viernes";
      break;
      case 6:
             day = "Sábado";
      break;
}
return day;
[/gml]

De esta forma el código queda un poco más largo pero es más eficiente por la misma estructura del switch en comparación del if (lo aprendí gracias al amigo Texic!).