Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: DEADOFALL en Febrero 06, 2014, 01:22:43 AM

Título: Interpretar Operación guardada en Variable
Publicado por: DEADOFALL en Febrero 06, 2014, 01:22:43 AM
Bueno, antes que nada, saludos a todos. Hacía tiempo que no preguntaba algo, pero por alguna razón jugaba yo en Game Maker con un plano cartesiano y unas coordenadas y varios puntos, cuando salvaje situación me detuvo en seco. En fin, no la hago larga, tenía en principio un código simple en un Script que ejecutan varios objetos en su evento Step:

yp=(2)*(xp);

Bueno, no es gran cosa, solo establecía que la variable "yp" sería igual a la variable "xp" multiplicada por 2. El problema fue cuando noté que lo que realmente necesitaba yo, era poder modificar la parte de ese código que define el valor de "yp", es decir, cambiar la operación realizada. De modo que pensé en poner un diálogo propio de Game Maker que me permitiera modificar la operación para obtener "yp". En otras palabras, creé una variable:

//Su valor (la operación en sí) obviamente quedo como String
global.operacion="(2)*(xp)";

Y pues mi código anterior (el del Script) quedó así:

yp=global.operacion;

El problema es que obviamente el valor no lo puede interpretar como debiera pues es String, es decir, si quiero poner por ejemplo:

global.operacion="(2/4)*(xp)";

El otro código en el Script no lo interpretaría como tal. Decidme si hay forma de que el código en el Script no interprete la variable como un String, es decir, que establezca la variable como la nueva operación para calcular "xp".
Espero haber sido claro XD
Título: Re:Interpretar Operación guardada en Variable
Publicado por: penumbra en Febrero 06, 2014, 01:44:00 AM
¿Por qué quieres definir la operación?

¿Cuántos tipos de operaciones distintas quieres definir?

En casos como estos he visto que una opción popular es usar la función execute_string(str,arg0,arg1,...) aunque últimamente he leído que no es conveniente, pues  es una función lenta, y facilita el uso de código malicioso por parte de otros usuarios para por ejemplo, hacer trampa en el juego o robar recursos del mismo
Título: Re:Interpretar Operación guardada en Variable
Publicado por: DEADOFALL en Febrero 06, 2014, 01:57:19 AM
Cita de: penumbra en Febrero 06, 2014, 01:44:00 AM
¿Por qué quieres definir la operación?

¿Cuántos tipos de operaciones distintas quieres definir?

En casos como estos he visto que una opción popular es usar la función execute_string(str,arg0,arg1,...) aunque últimamente he leído que no es conveniente, pues  es una función lenta, y facilita el uso de código malicioso por parte de otros usuarios para por ejemplo, hacer trampa en el juego o robar recursos del mismo

Deseo definir la operación para probar el comportamiento de ciertos puntos y coordenadas dependiendo de la operación que define "yp" sin tener que dejar el ejecutable y cambiar desde el .gmk.
En cuanto a tipos, son solo multiplicaciones del valor "xp".
La lentitud... no interesa, es que no es un juego que hago, es solo un experimento, por lo tanto no me preocupa que otros usuarios hagan trampas o roben recursos, como comentaste. Aún así, pues, sin usar argumentos en la función que me has señalado, no me ha funcionado, pero gracias de todos modos.

Si se os ocurre algo más ¡avisadme!
Título: Re:Interpretar Operación guardada en Variable
Publicado por: penumbra en Febrero 06, 2014, 02:23:36 AM
Si es sólo multiplicar xp por un factor, hay varias maneras de hacerlo, pero se me ocurre.

crear un mensaje en pantalla que solicite al usuario introducir el factor

factor = get_integer("Qué factor usar en el sistema de coordenadas?", 2)

Crear un script "operacion()" que realice la operación (valga la redundancia). El código del script sería
var factor0, xp0, yp0;
factor0 = argument0,
xp0 = argument1
yp0 = factor0 * xp0
return yp0


El script lo debes llamar en STEP, después de haber leído el valor del factor (mediante el mensaje en pantalla)
yp = operacion(factor, xp)

En esencia esa es la idea, pedir un valor, ejecutar un script que use el valor que se introdujo, devolver el resultado. Obcviamente no está completo, falta hacer que el factor sólo se pida una vez, no cada STEP, por ejemplo.

if (factor == 0)
     factor = get_integer("Qué factor usar en el sistema de coordenadas?", 2)