Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - calio

31
Preguntas y respuestas / Re:Teclado y cambio de room
Enero 12, 2013, 03:26:31 AM
Archivos externos parece ser la solución más adecuada, sin embargo no es tan difícil hacerlo directamente desde el código, utilizando estructuras de datos como grids :D

En fin, mi duda se resolvió de forma inesperada con una solución que nada tiene qué ver con lo que quería lograr, pero es una solución al fin y al cabo ._.

De todos modos, me gustaría saber si alguien tiene alguna idea sobre cómo arreglarlo.
32
Preguntas y respuestas / Re:Como hacer un checkpoint
Enero 12, 2013, 03:23:34 AM
EDIT: Se me pasó por alto un caso xD lo acabo de arreglar en el código :)

Como mencionan anteriormente, es mucho más fácil proponer una solución cuando tienes el problema en frente. Ahora vamos a tener que trabajar con suposiciones :p

Vamos a ir al evento Create de éste objeto y vamos a definir un par de variables nuevas

checkpoint_x = -1;
checkpoint_y = -1;
checkpoint_room = -1;
dead = false;

Estas van a ser las variables que nos van a ayudar a devolver al personaje al lugar adecuado. Añado además una variable que defina si nuestro personaje está o no muerto.

Ahora vamos a nuestro objeto de checkpoint, al que llamaremos convenientemente obj_checkpoint.
Vamos a definir una variable en el evento Create del checkpoint:

active = false;


Ahora vamos a hacer un evento de colisión entre el objeto de jugador y obj_checkpoint, para eso vamos nuevamente al objeto del jugador y agregamos un evento de colisión con obj_checkpoint y en éste escribimos el siguiente código:

if (other.active == false)
{
with (obj_checkpoint) { active = false; }
checkpoint_x = other.x;
checkpoint_y = other.y;
checkpoint_room = room;
other.active = true;
}


y ahora, vamos al evento Step del objeto del actor que controla el jugador y escribimos el siguiente código:

if (dead == true)
{
if (checkpoint_room == room)
{
x = checkpoint_x;
y = checkpoint_y;
}
else
{
room_goto(checkpoint_room);
//este código asume que tu objeto de personaje no es persistente, por lo que crea una instancia nueva del objeto de jugador en lugar de sólo cambiarla de room.
instance_create(checkpoint_x,checkpoint_y,obj_player);
}
dead = false;
}
else
{
//todo el código de movimiento y control del personaje mientras está vivo
}


Con éste código el personaje debería volver inmediatamente al último checkpoint cada vez que la variable dead sea verdadera.

Como adendo, me gustaría aclarar que sería preferible si tu personaje es un objeto persistente, así te evitas tener que crear y destruir instancias cada vez que cambies de room. De todos modos, también puedes trabajar con un objeto de personaje que no sea persistente y dejar que los datos queden guardados en un objeto de control que sí sea persistente (el objeto que ocupas para dibujar el hud del juego en pantalla, por ejemplo) o incluso que al cambiar de room el objeto anterior del personaje cree una instancia nuevo de personaje y manualmente le traspase cada una de las variables a la instancia nueva.
Para hacer esto puedes hacerlo de la siguiente forma:

var player;
player = instance_create(checkpoint_x,checkpoint_y,obj_player);
player.checkpoint_x = checkpoint_x;
player.checkpoint_y = checkpoint_y;
//etc etc etc


Espero esto te ayude :)
33
Buenas :)

Para que lo que describes no suceda, necesitas decirle al programa que necesitas que chequee si el objeto está fuera de los márgenes de la room, y de cumplirse esa condición el objeto debe ejecutar una acción que lo devuelva dentro de los márgenes de la room.

De seguro ya se te había ocurrido algo así, pero no sabías exactamente cómo programarlo. La estructura que andas buscando se llama "condicional" y lo puedes estructurar de la siguiente manera:



Si te fijas, tienes un elemento que checkea si la expresión escrita dentro es verdadera, y de serlo ejecuta los elementos que tiene debajo. Eso es el condicional.

Dentro del elemento condicional tienes una expresión. Una expresión es una afirmación, y va desde algo tan sencillo como "variable == 3" que se traduce como "variable es igual a 3", hasta afirmaciones más complejas como "((variable1 == false) and (variable2 < 40)) or ((variable1 == true) and (variable2 > 24))" que se traduce como "variable1 es falso y variable2 es menor a 40, o variable1 es verdadero y variable2 es mayor que 24". ¿Complicado? Un poco, pero ya se va a volver un poco más sencillo.



La expresión dentro del condicional es
((x > 0) && (x < room_width) && (y > 0) && (y < room_height))
que significa "la posición horizontal del objeto es mayor que 0 y es menor que el ancho de la habitación, y la posición vertical del objeto es mayor que 0 y es menor que es alto de la habitación". Ten en cuenta que las variablex x e y corresponden a la posición horizontal y vertical del objeto.

Si esa expresión es falsa, es decir, si no se cumple la afirmación (si te fijas, tiene el cuadrito de NOT seleccionado, lo que significa que chequea que la expresión sea falsa, no verdadera) el código de abajo se ejecuta, que probablemente es el código que ya estás ejecutando actualmente para que el objeto cambie de posición a otra posición al azar.



Para ejecutar el cambio de posición en el objeto programamos una seguidilla de acciones que sucede al presionar la barra espaciadora, en que una instancia nueva del objeto se crea y la instancia actual es eliminada.

Ahora, si te fijas éste método tiene un problema, y es que se ejecuta en el evento Step, es decir, está constantemente ejecutándose. Un condicional sólo se ejecuta una vez, por lo tanto, si el evento fuese una condición en sí misma como una colisión con otro objeto, o presionar una tecla, y en la primera ocasión el objeto quedase fuera de la room, se ejecutase el código y el objeto volviese a quedar fuera de la room, el objeto no volvería a la vista de la room, porque el código sólo se ejecuta una vez por llamada.

Existe otro tipo de estructura que se llaman ciclos, que efectivamente se ejecutan en múltiples ocasiones hasta que la condición de término se cumpla, pero lamentablemente no hay forma de estructurar un ciclo con Drag and Drop, así que te voy a mostrar cómo hacer un ciclo do en código :D



Si te fijas, éste objeto funciona exactamente igual al anterior, sólo que en vez de ejecutar el código en un evento Step, es decir, continuamente, lo ejecuta en el evento Create, que sólo se ejecuta al momento de crearse una instancia de éste objeto. En el evento Create ponemos un elemento de ejecución de código, y dentro de éste ponemos:



Éste es el código:

while  (((x > 0) && (x < room_width) && (y > 0) && (y < room_height)) == false)
{
x = random((room_width div 16) - 1)*16;
y = random((room_height div 16) - 1)*16;
}                                         


Básicamente la estructura de un ciclo while es

while (condición)
{
código
}

donde código se ejecuta mientras la expresión condición sea verdadero. En éste caso, mientras la expresión "(((x > 0) && (x < room_width) && (y > 0) && (y < room_height)) == false)" sea verdadera, o lo que es lo mismo, que la expresión "((x > 0) && (x < room_width) && (y > 0) && (y < room_height))" sea falsa.

Ten en cuenta que la función random(número) devuelve un valor al azar entre 0 y número, y que la expresión "x = random((room_width div 16) - 1)*16" lo que hace es dividir el ancho de la habitación entre 16 sin considerar el resto de la división (es decir, siempre devuelve un número entero) y restarle 1, luego devuelve un valor al azar entre 0 y ése resultado lo multiplica por 16, y se lo asigna a la posición horizontal del objeto, teniendo el mismo resultado que eso de snap hor y snap ver en la función "Jump to Random". Lo mismo se aplica a la expresión "y = random((room_height div 16) - 1)*16" pero para la posición vertical :)

Una última cosa, si no entendiste ni pio, te dejo un editable para Game Maker 7 (que creo que sí puede abrirse en Game Maker 8.1) con todo lo que te explico acá :) ¡Ojalá te sea útil!
34
Preguntas y respuestas / Re:Teclado y cambio de room
Enero 11, 2013, 10:28:00 PM
Cita de: brunoxzx en Enero 11, 2013, 04:03:50 PM
Haz intentado simplemente usar la funcion io_handle() justo despues de cambiar de room?. Si eso funciona probablemente no necesitaras el metodo de los arrays. La verdad no se me ocurre mucho más. Es dificíl conciderando que pocos tienen gm para mac.

Sí, lo intenté y no funciona. Me da la sensación de que no estoy usando la función correctamente, pero en realidad no hay motivo para pensar eso.
Por lo demás, hice un thread en el subreddit de Game Maker de reddit, y un usuario me dio una solución bastante buena y razonable: deshacerme de los cambios de room por completo, y cargar dinámicamente el contenido de los niveles en una sola room.
35
Preguntas y respuestas / Teclado y cambio de room
Enero 11, 2013, 02:21:15 AM
Buenas :)

Estaba probando un código cuando me di cuenta de uno de los comportamientos extraños de GameMaker, resulta que el estado de las teclas (a través de keyboard_check() por ejemplo) es completamente ignorado en el cambio de habitación.

La solución que he encontrado en todos lados es ocupar la función keyboard_check_direct(), sin embargo por el funcionamiento del runner en GameMaker para Mac ésta función devuelve exactamente el mismo valor que keyboard_check() por lo que es natural descartarla.

Para añadir insulto a la injuria, las funciones keyboard_key_press() y keyboard_key_release() no funcionan en lo absoluto, haciendo imposible hacer manualmente en código el cambio de estado en las teclas al comenzar cada room.

Lo he intentado todo, y hasta ahora sólo tengo una solución parche que funciona sólo durante un cambio de room. A continuación se los explico:

Prescindí por completo de chequear directamente el estado de las teclas en los objetos que reciben órdenes a través del teclado, y en su lugar programé un rudimentario sistema de condicionales con una variable global para las teclas más importantes del juego.


if (keyboard_check_pressed(vk_left) == true)
{
global.dpad[0] = true;
}
if (keyboard_check_released(vk_left) == true)
{
global.dpad[0] = false;
}
//ad infinitum con todas las teclas posteriores


y luego, en el código del objeto de actor que es controlado por el usuario, va el siguiente código:


event_inherited(); //Hereda todas las mecánicas de la "clase" actor

if (global.kbwait == false)
{
walking = (((global.dpad[0] == true) && (dir == -1)) || ((global.dpad[1] == true) && (dir == 1)));
//etcetera para todas las acciones que el actor puede realizar, como correr, saltar y todo eso.
}
else
{
global.kbwait = false;
}


ahora, la variable global kbwait apareció cuando me di cuenta que era muy fácil provocar un bug peor que detenerse en cada cambio de room, y sucedía cuando el jugador soltaba la tecla en medio de un cambio de habitación, haciendo que el juego no reconociese éste evento y siguiese actuando tal cual como si la tecla siguiese presionada.

Básicamente, cada vez que la condición del cambio de room se cumple, el juego activa el siguiente código antes de llamar a la función de cambio de room:


global.kbwait = true;
global.dpad[0] = keyboard_check_direct(vk_left);
//etcetera para el resto de las teclas


Y esto soluciona ése error, pero vuelve al bug original (no recordar las teclas presionadas entre rooms) sólo que en lugar de suceder en la room siguiente, sucede en la subsiguiente.

Ahora, un par de anotaciones que he hecho con respecto a éste comportamiento:


  • No tiene un resultado estable. Mientras más arreglos le hago al código, más estabilizo el error, pero originalmente a veces no sucedía en absoluto, otras veces el valor devuelto por la función era false durante un par de steps y luego volvía a ser 1, y en otras ocasiones el valor devuelto por la función era 0 hasta que se soltase la tecla y se volviese a presionar.
  • Es más probable que suceda al presionar una tecla mientras hay otra presionada, lo que me hace sospechar de la variable keyboard_key pues ésta vuelve a ser 0 cuando se presiona una tecla mientras hay otra ya presionada.
  • Éste es un error de GameMaker para Mac, pues el mismo código funciona a la perfección en su versión para Windows.
  • La función io_handle() parece prometedora, pero por más que intento ocuparla bien, no puedo encontrar ejemplos fuera de ocuparla dentro de ciclos while, donde funciona a la perfección.

¿A alguien se le ocurre una forma de solucionar un bug como éste? Muchas gracias de antemano :)
36
Desarrollo de Scripts / explode()
Octubre 01, 2012, 09:55:17 PM
Creador:
El script original es de HelpTheWretched.
Las modificaciones son mias.


Versión:
Debiese funcionar en cualquier versión de Game Maker que cuente con las funciones de strings. Estimo -sin mirar los manuales- que ésto abarca desde Game Maker 4 hasta 8.1.


Breve explicación
explode() es una función presente en muchos lenguajes, como javascript o php, y sirve básicamente para convertir una string compuesta por dos o más valores separados por un caracter en un array ordenado.
Por ejemplo, explode convertiría la siguiente string
"24,48,36,2,8"
en el siguiente array:

array[0] = 24;
array[1] = 48;
array[2] = 36;
array[3] = 2;
array[4] = 8;

Game Maker no cuenta con una función explode(), y hace un tiempo necesitaba un script que cumpliese ésa función. Me dió pereza hacer uno yo mismo, y encontré uno programado por HelpTheWretched, posteado en la GMC. El problema era que utilizaba la funesta función variable_local_array_set para ingresar los valores al array. No siendo muy entusiasta de ésa familia de funciones, y dándome cuenta que es un poco difícil programar una función explode sin hacer cosas sucias, decidí modificar el script para que no las utilizase.
A continación les ofrezco el script modificado :)


Uso
explode(n,substr,str);
n = la posición del valor a devolver (0 el primer valor, 1 el segundo, etc.)
substr = el caracter o el string a utilizar como separador de cada valor (por ejemplo, ",")
str = la string que contiene los valores (por ejemplo, "4,8,12")


El script

var seps, substr, str;
seps = string_count(argument1,argument2);
if (argument0 > seps)
{
return "-1";
}
else
{
for (i=0; i<seps+1; i+=1) {
    if (i < seps)
    {
    substr[i] = string_copy(argument2,1,string_pos(argument1,argument2)-1);
    }
    else
    {
    substr[i] = argument2;
    }
    argument2 = string_delete(argument2,1,string_length(string(substr[i])+string(argument1)));
}
return (substr[argument0]);
}

El script sólo devuelve un valor, asignado a través del primer argumento. Para ingresar todos los valores en un array, ésta función debe ser puesta dentro de un ciclo for. A continuación, un ejemplo de ésta función utilizada.

var array, string;
string = "Hola,Esto,Es,Una,String";
for (n = 0; n < (string_count(",",string)); n += 1)
{
string[n] = explode(n, ",", string); /*El ciclo for asigna el n-avo valor dentro de string al elemento del array con índice n.*/
}
show_message(string[4]); //Ésto debiese mostrar un mensaje que diga "String".

Como se pueden dar cuenta, el script no funciona exactamente como en otros lenguajes, pero cumple su cometido sin recurrir a funciones lentas y obsoletas.
Ojalá les sea útil en sus proyectos :)
37
si tienes algo de tiempo y conocimientos de programación en c++ y java, puedes echarle una mirada a Enigma, un proyecto de código abierto inspirado en Game Maker que busca interpretar GML como C++.
http://enigma-dev.org/
38
sospechaba que era ASCII, pero algunas irregularidades en la versión de Mac (los caracteres especiales los detectaba todos como el mismo código, cosas así) me hacían dudar y pensar que a lo mejor era otra cosa.

¡Muchísimas gracias, Texic! :D Ahora que se que es estándar para todos los sistemas, puedo usar el código directamente y no valerme de la constante de Game Maker y tener un editable en común para Windows y Mac :P

Muchas, muchas gracias :)
39
hola :)
ésta es una pregunta general que se origina frente a uno de los tantos bugs de Game Maker 7 para Mac, y necesito de su ayuda para saber cómo solucionarlo.
la constante vk_enter en Game Maker 7 para Mac corresponde al entero 95. dicho de otro modo,
vk_enter = 95
sin embargo, el juego no tomaba en cuenta cuando yo presionaba la tecla enter. me metí a debuggear y me llevé la sorpresa de que Game Maker toma enter como 13, es decir

//al presionar la tecla Enter
keyboard_lastkey = 13;

//...y en un evento step
if (keyboard_check_pressed(vk_enter))
{
...
}
//keyboard_check_pressed(vk_enter) devuelve false al presionar la tecla enter, porque 95 != 13. duh.

Mis preguntas son las siguientes:
1. ¿A qué número corresponde la tecla enter en Game Maker en Windows? ¿95, 13 o algo más? (ésto lo pueden ver del mismo modo en que lo vi yo: abriendo cualquier juego en modo debug y en la ventana de debug añadiendo la variable "keyboard_lastkey" para monitorear. ésta variable devuelve el código correspondiente a la última tecla presionada.)
2. ¿Éstos códigos corresponden a algún estándar? De ser así, ¿Hay alguna parte donde uno pueda ver una lista completa de qué tecla corresponde a qué código?
3. ¿Hay alguna forma de modificar los valores de una constante para un proyecto en Game Maker? intuyo que no, pero nada pierdo con preguntar :p

¡Muchas gracias de antemano!
40
¡Muchas gracias a todos por el feedback! Lo agradezco muchísimo.

GM Database Support se oye como algo muy interesante :O como no lo he probado no puedo emitir ningún juicio al respecto. Lo revisaré :)

Además del link que muy amablemente proporcionó Fenris78, puse editables para las versiones 8, 7 y 6. No se qué tan bien funcionen, pero por lo menos pueden abrir el editable y revisar las entrañas del programilla :)

Nuevamente, muchas gracias a todos por el feedback. ¡Cuéntenme si la herramienta les resultó útil en algún proyecto!
41
Lamento enormemente las molestias por el ejecutable u_u
Como se puede ver en la screenshot, no estoy desarrollando en Windows de forma nativa, si no en Mac OS a través de WINE (en un wrappe hechos con Wineskin, para ser más específico). El principal inconveniente con éste método, además del evidente, es que la forma más sencilla de ejecutar un binario de Windows mediante éste método es crear un wrapper para cada ejecutable. Erradamente me basé en la absurda suposición de que si Game Maker era capaz de interpretar el proyecto con el runner al presionar el botón para probar el proyecto (la flechita verde) iba a ser capáz también de generar un ejecutable. Veo que me equivoqué n_nU

Texic, si pudieses facilitarme un ejecutable del proyecto te estaría eternamente agradecido :) Si no puedes, o te resulta inconveniente, no hay problema. Se me está haciendo menester habilitar una máquina con Windows acá ._.

...y sobre las funciones a añadir. A decir verdad, había pensado en añadir comandos para filas, pero como inicialmente era una herramienta para uso personal, pensé "para qué me voy a molestar, si nunca ocuparía tal opción", pero sí, es razonable, y bastante sencillo de implementar, la verdad.
Por otro lado, la opción de cambiar todo los elementos de una columna, al igual que de automatizar una secuencia en una columna, como de limpiarla con ceros ya existen, basta con hacer click en el título de la columna que quieras editar :) sale en la ventanita de información que escribí muy apurado antes de subir el resultado acá xD

Y sobre la opción de ingresar datos secuencialmente desde un .txt... es una gran idea, a decir verdad :o se me debería haber ocurrido xD bueh, pretendo seguir actualizando éste proyecto.

Muchísimas gracias por el feedback :D y, nuevamente, disculpen las molestias n_nU
42

DBMaker

Otro

GM8

DBMaker es una herramienta pensada para la adminsitración visual de grillas (la estructura de datos, o data structure, llama grid en Game Maker) como bases de datos para crear, editar, importar y exportar éstas estructuras en el formato nativo de Game Maker como una string en un archivo de texto plano.
La idea principal de DBMaker es facilitar la creación de tablas de datos para usar en juegos *cough*stats base para monstruos en un RPG*cough* haciendo más sencilla la tarea de planear y desarrollar dichos juegos.
Puedes expotar las bases de datos creadas en DBMaker para usarlas en otros juegos (o si no no tendría ningún sentido) o para seguirlas editando posteriormente en DBMaker. La extensión de archivo .dbmonster qur guarda no tiene otra finalidad que identificar a los archivos de DBMaker como estructuras de datos legibles por el programa, pues usa el método nativo de Game Maker para importar y exportar las grillas. Eso significa, también, que no se necesita ningún script adicional para abrir e interpretar los datos generados por DBMaker en un proyecto de Game Maker, siendo incluso posible copiar y pegar el contenido del archivo en el código del proyecto, como una string.
También tiene un fondo bonito.



Editable .gm81: https://dl.dropbox.com/u/173377/dbmaker_v1.0_8.1.zip
Editable .gmk (para versión 8.0): https://dl.dropbox.com/u/173377/dbmaker_v1.0_8.0.zip
Editable .gmk (para versión 7.0): https://dl.dropbox.com/u/173377/dbmaker_v1.0_7.0.zip
Editable .gm6 (experimental. sin probar. descárguese bajo su propio riesgo): https://dl.dropbox.com/u/173377/dbmaker_v1.0_6.0.zip
Ejecutable: http://www.comunidadgm.org/index.php?action=dlattach;topic=17499.0;attach=11421


Antes que nada, muchísimas gracias a Fenris78 por facilitarme un ejecutable.
Revisen con f1 la información. Adjunta está la licencia y las instrucciones de uso.
Ah, y para navegar a través de la grilla, usa las teclas direccionales.
Dada la licencia MIT, publico también un editable .gm81. Échenle un ojo a la licencia adjunta a la aplicación para saber cómo funciona el asunto.

43
?Muchas gracias a todos por su ayuda! :D
Ok, voy a explicar mi problema en extenso, pero les advierto que va a ser un poco largo y aburrido de leer.
Ver?n, estoy reescribiendo un motor de plataformas, y ?sta duda surge por un asunto con los di?logos.
El sistema de di?logos que hice define las l?neas de di?logo en el c?digo de creaci?n de cada instancia. Actualmente las guarda en arreglos unidimensionales. Se me ocurri? que ser?a bonito poder hacer que los NPC tengan l?neas de texto din?micas, por ejemplo, que digan cosas en contexto antes y despues de lograr un objetivo, y para eso necesito ocupar arreglos bidimensionales.
[gml]
//Antes
if (variable_global_array2_get("trigger",scn_dungeon5c,0)=true){
dialog_set_line("?Gracias por matar al monstruo malo!");
}
else{
dialog_set_line("Hay un monstruo malo que nos pega en la mazmorra :(");
}
//Ahora
dialog_set_line("Hay un monstruo malo que nos pega en la mazmorra :(",0);
dialog_set_line("?Gracias por matar al monstruo malo!",1);
[/gml]
En el motor anterior, sencillamente lo estaba haciendo recurriendo a chequear interruptores al definir las l?neas de texto en el c?digo de creaci?n de la instancia, sin embargo eso conlleva un problema. Supongamos que uno activa un interruptor en la misma habitaci?n que quiere cambiar el di?logo de un personaje. El di?logo nuevo s?lo se mostrar?a cuando la habitaci?n vuelva a cargarse y la instancia vuelva a crearse. Para ?sto, necesito hacer que el c?digo chequee qu? ?ndice ocupar al comenzar a leer las l?neas del arreglo bidimensional. Ahora, como cada posible di?logo estar?a vinculado a distintas posibles condiciones, necesito una forma de definir din?micamente, es decir, sin echarle mano al c?digo de los actores, qu? variable chequear, por lo que necesito pasar un argumento que impique guardar el nombre de una variable, m?s no su valor, que ser?a chequeado en otro script posteriormente.
Camino a casa estuve pensando que, dado que ocupo s?lo una variable para guardar todos los interruptores, quiz?s la soluci?n implique requerir tres argumentos en el script, dos para la variable de interruptor (para hacer las cosas m?s manejables, el primer ?ndice de la variable de interruptores es la room en la que se activa y la segunda es su n?mero identificador :B) y el n?mero del ?ndice del banco de l?neas de di?logo que corresponde a esa variable, entonces, ?stas quedar?an almacenadas como
[gml]
interruptor_necesario[indice_dialogo,0]=indice1_interruptor;
interruptor_necesario[indice_dialogo,1]=indice2_interruptor;
[/gml]
y as? todo se soluciona :D
La soluci?n mediante execute_string la supuse, pero es lenta y no es buena idea. La soluci?n de Zelt parece la m?s viable si tuviese que hacerlo con m?s de una variable, pero como s?lo ocupo una variable me parece que ya lo solucion?.
?Much?simas gracias a todos, nuevamente! :D
44
Buenas.
?Alguien sabe si se puede pasar una expresi?n como argumento en un script?
Supongamos que tengo el siguiente script llamado scr_prueba1 que se ejecuta en el evento de creaci?n de una instancia
[gml]
var_expresion=argument0;
[/gml]
donde argument0 es una expresi?n, digamos, "variable1>variable2". variable1 vale 0 y variable2 vale 5, por lo que la expresi?n es falsa y la variable var_expresion tendr?a por valor false. Sin embargo, en el evento step tenemos otro script, llamado scr_prueba2, que dice lo siguiente
[gml]
if (var_expresion=true){
//Expresi?n verdadera
}
else{
//Expresi?n falsa
}
[/gml]
En el bucle se ejecutar?a la segunda parte, la excepci?n, pues 0 es menor que 5 por lo que variable1 no es mayor que variable2. El problema es que si los valores de variable1 y variable2 se invierten y la expresi?n pasa a ser verdadera, el valor de var_expresion no cambia, pues lo que var_expresion guarda es un true o un false, no la expresi?n (variable1>variable2). Esa es mi pregunta. ?Existe alguna forma de guardar no el valor de una expresi?n, si no la expresi?n misma en una variable? No guardar constantemente el valor de la expresi?n, pues eso podr?a hacerlo utilizando el mismo script que uso al principio, scr_prueba1, en el evento step, si no la expresi?n. Quiz?s se pueda guardar como una string, pero luego no se c?mo volver a pasarlo como expresi?n en un script, adem?s de no saber qu? tan ?ptimo ser?a hacerlo de ?se modo.
Eso. Ayuda por favor :c y muchas gracias de antemano.
45
Estaba revisando mis CDs de respaldo y entre todos los editables, encontr? uno de Game Maker 4.x que cuando abr? record? de inmediato haber hecho y no tener idea c?mo funcionaba. La cosa es que lo actualic? un poquito, lo pas? a formato 7.x, lo limpi? y hoy se los traigo para hacerles la siguiente pregunta: ?Alguien me puede explicar c?mo diablos funciona lo que hice? xD

Me gusta el efecto (Es con el mouse, y reacciona diferente seg?n la velocidad a la que lo muevas) pero honestamente no entiendo c?mo funciona. Jugando un poco con los par?metros, el radio de la esfera que se forma var?a seg?n la velocidad de la funci?n move_towards_point y por alg?n motivo hasta antes del evento draw que le puse a los objetos ?stos parpadeaban. (Si quieren ver c?mo es eso, creen un sprite de 1x1 y asignenselo al objeto habiendo borrado el c?digo de Draw).

Si alguien quiere usarlo para algo adelante :p Yo no le veo mayor utilidad que Eyecandy.

Un saludo :)