Del GM: Studio 1.4, no, o al menos no oficialmente.
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.
181
Preguntas y respuestas / Re:¿game maker studio tiene el motor disponible en español?
Noviembre 04, 2017, 05:35:59 AM182
Preguntas y respuestas / Re:Error extraño en la compilación a Android
Noviembre 03, 2017, 07:02:02 AM
El error ha cambiado, lo que significa que Gradle ya fue instalado correctamente.
El nuevo error es del keystore. Ve a la File » Prefferences, y crea el keystore desde ahí.
El nuevo error es del keystore. Ve a la File » Prefferences, y crea el keystore desde ahí.
183
Preguntas y respuestas / Re:¿Como darle color azar a los background?
Noviembre 02, 2017, 07:24:06 AM
Con background_blend[].
[gml]
background_blend[0] = make_colour_hsv( irandom(254), 255, 255 );
[/gml]
Y con tiles, usando la función tile_get_blend().
[gml]
background_blend[0] = make_colour_hsv( irandom(254), 255, 255 );
[/gml]
Y con tiles, usando la función tile_get_blend().
184
General / Re:Android Studio y SDK Manager
Noviembre 02, 2017, 06:35:43 AM
Yo recientemente lo he descargado, instalado y compilado de la siguiente manera:
El SDK lo descargas desde aquí:
https://android-sdk.uptodown.com/windows
Lo instalas y descargas los paquetes importantesde Android, que son las build-tools, los android-sdk y los google-apis.
Después intentas compilar en GM:S con ese SDK.
Cuando yo hice eso, el GM mostró un error, que al parecer era un problema con las licencias: No tengo captura, pero la consola decía que me faltaba aceptar los términos de ésta. Tal vez porque el instalador de paquetes es muy antíguo y la manera de aceptar la licencia ha cambiado.
Lo solucioné yendo a la ruta tools/bin/ del SDK, y ejecutando la consola de comandos desde ahí. Escribí este comando:
Una vez hecho esto, pasará un tiempo y después se mostrará la licencia en el CMD, y al aceptarla desde ahí, podrás compilar normalmente.
El SDK lo descargas desde aquí:
https://android-sdk.uptodown.com/windows
Lo instalas y descargas los paquetes importantesde Android, que son las build-tools, los android-sdk y los google-apis.
Después intentas compilar en GM:S con ese SDK.
Cuando yo hice eso, el GM mostró un error, que al parecer era un problema con las licencias: No tengo captura, pero la consola decía que me faltaba aceptar los términos de ésta. Tal vez porque el instalador de paquetes es muy antíguo y la manera de aceptar la licencia ha cambiado.
Lo solucioné yendo a la ruta tools/bin/ del SDK, y ejecutando la consola de comandos desde ahí. Escribí este comando:
Código [Seleccionar]
sdkmanager --update
Una vez hecho esto, pasará un tiempo y después se mostrará la licencia en el CMD, y al aceptarla desde ahí, podrás compilar normalmente.
185
Preguntas y respuestas / Re:¿Como debería programar este botón?
Noviembre 02, 2017, 05:17:55 AM
Sólo usa una variable como identificador de sala, y modifícala en el creation code.
[gml]
///Evento create del botón
roomTarget = noone;
[/gml]
[gml]
///Evento mouse pressed (por ejemplo) del botón
if(room_exists(roomTarget))
room_goto(roomTarget);
[/gml]
Y modificas la variable roomTarget en el creation code.
[gml]
///Creation code del botón
roomTarget = room_Inicio; //por ejemplo
[/gml]
[gml]
///Evento create del botón
roomTarget = noone;
[/gml]
[gml]
///Evento mouse pressed (por ejemplo) del botón
if(room_exists(roomTarget))
room_goto(roomTarget);
[/gml]
Y modificas la variable roomTarget en el creation code.
[gml]
///Creation code del botón
roomTarget = room_Inicio; //por ejemplo
[/gml]
186
Preguntas y respuestas / Re:Tengo una duda para este muñeco de prueba
Noviembre 02, 2017, 05:15:23 AM
Crea un objeto sin sprite con el código importante del jugador (movimiento e interacciones), y asígnalo como parent tanto al jugador como al personaje de prueba.
187
Preguntas y respuestas / Re:Error extraño en la compilación a Android
Octubre 31, 2017, 05:01:27 AM
Debe ser algún problema con la conexión al servidor de Gradle. Intenta instalarlo manualmente, y después añade a la variable de entorno PATH la ubicación del directorio bin, que está en donde instalaste gradle.
https://gradle.org/install/#manually
https://gradle.org/install/#manually
188
Preguntas y respuestas / Re:¿Como se interpreta esto?
Octubre 31, 2017, 02:00:08 AM
Recuerda que el nombre de archivo debe ser una cadena, así que debes ponerlo entre comillas. Además, es recomendable comprobar si el archivo a eliminar existe para evitar que surja un error.
[gml]
if(global.tiempo < 0) //Si la variable tiempo es menor que cero , quiere decir que el tiempo termina en -1, tu tiempo debe estar en negativo
{ //entonces
global.tiempo = 0 //el tiempo se iguala a cero, puede haber un error en este codigo, trata de revisar <-- ¿debería eliminarlo?
global. vida = 0 //la vida del jugador se iguala a cero
if(file_exists("partida.sav"))
file_delete("partida.sav") //Eliminamos el archivo
game_restart() //Creo que es mejor que no uses argumentos en esta función.
}
[/gml]
[gml]
if(global.tiempo < 0) //Si la variable tiempo es menor que cero , quiere decir que el tiempo termina en -1, tu tiempo debe estar en negativo
{ //entonces
global.tiempo = 0 //el tiempo se iguala a cero, puede haber un error en este codigo, trata de revisar <-- ¿debería eliminarlo?
global. vida = 0 //la vida del jugador se iguala a cero
if(file_exists("partida.sav"))
file_delete("partida.sav") //Eliminamos el archivo
game_restart() //Creo que es mejor que no uses argumentos en esta función.
}
[/gml]
189
Preguntas y respuestas / Re:¿Como se interpreta esto?
Octubre 31, 2017, 12:33:59 AM
Es extraño, el manual no parece decir que game_restart() tenga algún argumento. Si quieres eliminar todos los datos, sería mejor que usaras la función file_delete().
190
Preguntas y respuestas / Re:¿Como creo unas opciones de controles de menú?
Octubre 31, 2017, 12:27:27 AM
Hay muchas maneras, pero en general se resume en que necesitas guardar las teclas escogidas con archivos externos, y éstas deben ser escogidas por el jugador a través de alguna interfaz.
Por ejemplo, en el evento create de algún controlador que esté presente sólo en las habitaciones de juego, podrías hacer esto:
[gml]
///Create de algún controlador
globalvar teclas;
teclas = ds_map_create();
ini_open("teclas.ini");
teclas[? "player_iz"] = ini_read_real("teclas", "player_iz", ord("A")); //Tecla de movimiento izquierda
teclas[? "player_dr"] = ini_read_real("teclas", "player_dr", ord("D")); //Tecla de movimiento derecha
teclas[? "player_up"] = ini_read_real("teclas", "player_dr", ord("W")); //Tecla de movimiento arriba
ini_close();
[/gml]
Y en el código de movimiento, reemplazarías los códigos de teclas que usas por los cargados del ini.
[gml]
///Evento step del player
keyLeft = -keyboard_check(teclas[? "player_iz"]);
keyRight = keyboard_check(teclas[? "player_dr"]);
keyDown = keyboard_check(teclas[? "player_up"]);
[/gml]
Por lo demás, sería cuestión tuya crear la interfaz y escribir en los valores del ini las teclas que el usuario seleccione.
Por ejemplo, en el evento create de algún controlador que esté presente sólo en las habitaciones de juego, podrías hacer esto:
[gml]
///Create de algún controlador
globalvar teclas;
teclas = ds_map_create();
ini_open("teclas.ini");
teclas[? "player_iz"] = ini_read_real("teclas", "player_iz", ord("A")); //Tecla de movimiento izquierda
teclas[? "player_dr"] = ini_read_real("teclas", "player_dr", ord("D")); //Tecla de movimiento derecha
teclas[? "player_up"] = ini_read_real("teclas", "player_dr", ord("W")); //Tecla de movimiento arriba
ini_close();
[/gml]
Y en el código de movimiento, reemplazarías los códigos de teclas que usas por los cargados del ini.
[gml]
///Evento step del player
keyLeft = -keyboard_check(teclas[? "player_iz"]);
keyRight = keyboard_check(teclas[? "player_dr"]);
keyDown = keyboard_check(teclas[? "player_up"]);
[/gml]
Por lo demás, sería cuestión tuya crear la interfaz y escribir en los valores del ini las teclas que el usuario seleccione.
191
Preguntas y respuestas / Re:Dividir variables
Octubre 29, 2017, 10:41:56 AM
Revisa si ahora sí:
[gml]
///Evento Create
var datos = ds_map_create();
/*
Se abrirá una ventana de diálogo para ingresar el texto.
Se debe escribir por ejemplo:
potencia=3.15;vatios=9.11
*/
var entrada = get_string("Ingrese las variables:", "");
var partes = split(entrada, ";");
for(var i = 0; i < array_length_1d(partes); i++)
{
var assign = split(partes, "=");
if(array_length_1d(assign) == 2)
{
assign[0] = string_replace_all(assign[0], " ", "");
assign[1] = string_replace_all(assign[1], " ", "");
datos[? assign[0]] = real(assign[1]);
}
}
var resultado = ley_ohms_watts(datos);
potencia = resultado[? "potencia"];
resistencia = resultado[? "resistencia"];
intensidad = resultado[? "intensidad"];
vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
ds_map_destroy(datos); //Liberar de la memoria
[/gml]
[gml]
///Evento Create
var datos = ds_map_create();
/*
Se abrirá una ventana de diálogo para ingresar el texto.
Se debe escribir por ejemplo:
potencia=3.15;vatios=9.11
*/
var entrada = get_string("Ingrese las variables:", "");
var partes = split(entrada, ";");
for(var i = 0; i < array_length_1d(partes); i++)
{
var assign = split(partes, "=");
if(array_length_1d(assign) == 2)
{
assign[0] = string_replace_all(assign[0], " ", "");
assign[1] = string_replace_all(assign[1], " ", "");
datos[? assign[0]] = real(assign[1]);
}
}
var resultado = ley_ohms_watts(datos);
potencia = resultado[? "potencia"];
resistencia = resultado[? "resistencia"];
intensidad = resultado[? "intensidad"];
vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
ds_map_destroy(datos); //Liberar de la memoria
[/gml]
192
Preguntas y respuestas / Re:Dividir variables
Octubre 29, 2017, 10:00:16 AM
Puedes usar este script: split().
Y ahora, usa la función get_string() para ingresar la información mediante un cuadro de diálogo.
[gml]
///Evento Create
var datos = ds_map_create();
/*
Se abrirá una ventana de diálogo para ingresar el texto.
Se debe escribir por ejemplo:
potencia=3.15;vatios=9.11
*/
var entrada = get_string("Ingrese las variables:", "");
var partes = split(entrada, ";");
for(var i = 0; i < array_length_1d(partes); i++)
{
var assign = split(entrada, "=");
if(array_length_1d(assign) == 2)
{
assign[0] = string_replace_all(assign[0], " ", "");
assign[1] = string_replace_all(assign[1], " ", "");
datos[? assign[0]] = real(assign[1]);
}
}
var resultado = ley_ohms_watts(datos);
potencia = resultado[? "potencia"];
resistencia = resultado[? "resistencia"];
intensidad = resultado[? "intensidad"];
vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
ds_map_destroy(datos); //Liberar de la memoria
[/gml]
Si necesitas re-calcular los valores sin volver a ejecutar el juego, puedes agregar en algún evento de teclado la función room_restart(), que reiniciará la habitación actual del juego.
(Este código no lo he probado, avísame si tiene algún error.).
Y ahora, usa la función get_string() para ingresar la información mediante un cuadro de diálogo.
[gml]
///Evento Create
var datos = ds_map_create();
/*
Se abrirá una ventana de diálogo para ingresar el texto.
Se debe escribir por ejemplo:
potencia=3.15;vatios=9.11
*/
var entrada = get_string("Ingrese las variables:", "");
var partes = split(entrada, ";");
for(var i = 0; i < array_length_1d(partes); i++)
{
var assign = split(entrada, "=");
if(array_length_1d(assign) == 2)
{
assign[0] = string_replace_all(assign[0], " ", "");
assign[1] = string_replace_all(assign[1], " ", "");
datos[? assign[0]] = real(assign[1]);
}
}
var resultado = ley_ohms_watts(datos);
potencia = resultado[? "potencia"];
resistencia = resultado[? "resistencia"];
intensidad = resultado[? "intensidad"];
vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
ds_map_destroy(datos); //Liberar de la memoria
[/gml]
Si necesitas re-calcular los valores sin volver a ejecutar el juego, puedes agregar en algún evento de teclado la función room_restart(), que reiniciará la habitación actual del juego.
(Este código no lo he probado, avísame si tiene algún error.).
193
Preguntas y respuestas / Re:Animación de giro
Octubre 29, 2017, 12:02:58 AM194
Preguntas y respuestas / Re:Dividir variables
Octubre 28, 2017, 10:44:54 PM
Eso es porque las variables están declaradas localmente. Elimina la palabra var de la izquierda de las variables (no las del script). Quedaría así:
[gml]
///Evento Create
var datos = ds_map_create();
datos[? "potencia"] = 2;
datos[? "resistencia"] = 1.45;
var resultado = ley_ohms_watts(datos);
potencia = resultado[? "potencia"];
resistencia = resultado[? "resistencia"];
intensidad = resultado[? "intensidad"];
vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
ds_map_destroy(datos); //Liberar de la memoria
[/gml]
Y ahora, para dibujarlas fácilmente, puedes usar este script: sprintf().
Lo usarías algo así:
[gml]
///Evento Draw
draw_text(32, 32, sprintf(
"Resistencia: $1#Potencia: $2#Intensidad: $3#Vatios: $4",
string_format(resistencia, 1, 6), //Para dibujar 6 cifras decimales, y no sólo 2.
string_format(potencia, 1, 6),
string_format(intensidad, 1, 6),
string_format(vatios, 1, 6)
));
[/gml]
[gml]
///Evento Create
var datos = ds_map_create();
datos[? "potencia"] = 2;
datos[? "resistencia"] = 1.45;
var resultado = ley_ohms_watts(datos);
potencia = resultado[? "potencia"];
resistencia = resultado[? "resistencia"];
intensidad = resultado[? "intensidad"];
vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
ds_map_destroy(datos); //Liberar de la memoria
[/gml]
Y ahora, para dibujarlas fácilmente, puedes usar este script: sprintf().
Lo usarías algo así:
[gml]
///Evento Draw
draw_text(32, 32, sprintf(
"Resistencia: $1#Potencia: $2#Intensidad: $3#Vatios: $4",
string_format(resistencia, 1, 6), //Para dibujar 6 cifras decimales, y no sólo 2.
string_format(potencia, 1, 6),
string_format(intensidad, 1, 6),
string_format(vatios, 1, 6)
));
[/gml]
195
Preguntas y respuestas / Re:Dividir variables
Octubre 28, 2017, 10:27:43 AM
Según lo que entendí, quieres ingresar algunos de los datos, y que el programa calcule el resto, ¿verdad?
Si es así, el código que tienes en el evento Create es algo ilógico, pues requieres conocer los cuatro valores para hacer los cálculos.
Para solucionarlo, se me ocurre que podrías usar un script al que le puedas ingresar sólo los valores que tienes (deben ser como mínimo 2), y dependiendo de cuáles sean, calcular el resto despejándolos a partir de los conocidos.
Hice este script, que utiliza mapas para pasar la información de lado a lado:
[gml]
///ley_ohms_watts(mapa);
var mapa = argument0;
if(!ds_exists(mapa, ds_type_map))
return false;
var vatios = 0;
var resist = 0;
var potenc = 0;
var intens = 0;
if(ds_map_exists(mapa, "vatios") and ds_map_exists(mapa, "resistencia"))
//Si se conocen los vatios y la resistencia, calcular los demás a partir de ahí.
{
vatios = mapa[? "vatios"];
resist = mapa[? "resistencia"];
//Aquí hacemos los cálculos
if(resist <> 0) //Si la resistencia no es 0
intens = vatios / resist; //Calcular la intensidad
else
intens = 0; // De lo contrario, la intencidad es 0
potenc = vatios * intens;
}
else if(ds_map_exists(mapa, "vatios") and ds_map_exists(mapa, "potencia"))
//Si se conocen los vatios y la potencia, calcular los demás a partir de ahí
{
vatios = mapa[? "vatios"];
potenc = mapa[? "potencia"];
if(vatios <> 0)
{
intens = potenc / vatios;
resist = vatios / intens;
}
else
{
intens = 0;
resist = 0;
}
}
else if(ds_map_exists(mapa, "vatios") and ds_map_exists(mapa, "intensidad"))
//Lo mismo pero diferente
{
vatios = mapa[? "vatios"];
intens = mapa[? "intensidad"];
if(vatios <> 0)
resist = intens / vatios;
else
resist = 0;
potenc = vatios * intens;
}
else if(ds_map_exists(mapa, "resistencia") and ds_map_exists(mapa, "potencia"))
{
resist = mapa[? "resistencia"];
potenc = mapa[? "potencia"];
if(resist <> 0)
intens = sqrt(potenc / resist);
else
intens = 0;
vatios = intens * resist;
}
else if(ds_map_exists(mapa, "resistencia") and ds_map_exists(mapa, "intensidad"))
{
resist = mapa[? "resistencia"];
intens = mapa[? "intensidad"];
vatios = resist * intens;
potenc = vatios * intens;
}
else if(ds_map_exists(mapa, "potencia") and ds_map_exists(mapa, "intensidad"))
{
intens = mapa[? "intensidad"];
potenc = mapa[? "potencia"];
if(intens <> 0)
{
vatios = potenc/intens;
resist = vatios/intens;
}
else
{
resist = 0;
vatios = 0;
}
}
var resultado = ds_map_create();
resultado[? "vatios"] = vatios;
resultado[? "resistencia"] = resist;
resultado[? "potencia"] = potenc;
resultado[? "intensidad"] = intens;
return resultado;
[/gml]
Se puede usar, por ejemplo, así:
[gml]
var datos = ds_map_create();
datos[? "potencia"] = 2;
datos[? "resistencia"] = 1.45;
var resultado = ley_ohms_watts(datos);
var potencia = resultado[? "potencia"];
var resistencia = resultado[? "resistencia"];
var intensidad = resultado[? "intensidad"];
var vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
[/gml]
Si es así, el código que tienes en el evento Create es algo ilógico, pues requieres conocer los cuatro valores para hacer los cálculos.
Para solucionarlo, se me ocurre que podrías usar un script al que le puedas ingresar sólo los valores que tienes (deben ser como mínimo 2), y dependiendo de cuáles sean, calcular el resto despejándolos a partir de los conocidos.
Hice este script, que utiliza mapas para pasar la información de lado a lado:
[gml]
///ley_ohms_watts(mapa);
var mapa = argument0;
if(!ds_exists(mapa, ds_type_map))
return false;
var vatios = 0;
var resist = 0;
var potenc = 0;
var intens = 0;
if(ds_map_exists(mapa, "vatios") and ds_map_exists(mapa, "resistencia"))
//Si se conocen los vatios y la resistencia, calcular los demás a partir de ahí.
{
vatios = mapa[? "vatios"];
resist = mapa[? "resistencia"];
//Aquí hacemos los cálculos
if(resist <> 0) //Si la resistencia no es 0
intens = vatios / resist; //Calcular la intensidad
else
intens = 0; // De lo contrario, la intencidad es 0
potenc = vatios * intens;
}
else if(ds_map_exists(mapa, "vatios") and ds_map_exists(mapa, "potencia"))
//Si se conocen los vatios y la potencia, calcular los demás a partir de ahí
{
vatios = mapa[? "vatios"];
potenc = mapa[? "potencia"];
if(vatios <> 0)
{
intens = potenc / vatios;
resist = vatios / intens;
}
else
{
intens = 0;
resist = 0;
}
}
else if(ds_map_exists(mapa, "vatios") and ds_map_exists(mapa, "intensidad"))
//Lo mismo pero diferente
{
vatios = mapa[? "vatios"];
intens = mapa[? "intensidad"];
if(vatios <> 0)
resist = intens / vatios;
else
resist = 0;
potenc = vatios * intens;
}
else if(ds_map_exists(mapa, "resistencia") and ds_map_exists(mapa, "potencia"))
{
resist = mapa[? "resistencia"];
potenc = mapa[? "potencia"];
if(resist <> 0)
intens = sqrt(potenc / resist);
else
intens = 0;
vatios = intens * resist;
}
else if(ds_map_exists(mapa, "resistencia") and ds_map_exists(mapa, "intensidad"))
{
resist = mapa[? "resistencia"];
intens = mapa[? "intensidad"];
vatios = resist * intens;
potenc = vatios * intens;
}
else if(ds_map_exists(mapa, "potencia") and ds_map_exists(mapa, "intensidad"))
{
intens = mapa[? "intensidad"];
potenc = mapa[? "potencia"];
if(intens <> 0)
{
vatios = potenc/intens;
resist = vatios/intens;
}
else
{
resist = 0;
vatios = 0;
}
}
var resultado = ds_map_create();
resultado[? "vatios"] = vatios;
resultado[? "resistencia"] = resist;
resultado[? "potencia"] = potenc;
resultado[? "intensidad"] = intens;
return resultado;
[/gml]
Se puede usar, por ejemplo, así:
[gml]
var datos = ds_map_create();
datos[? "potencia"] = 2;
datos[? "resistencia"] = 1.45;
var resultado = ley_ohms_watts(datos);
var potencia = resultado[? "potencia"];
var resistencia = resultado[? "resistencia"];
var intensidad = resultado[? "intensidad"];
var vatios = resultado[? "vatios"];
ds_map_destroy(resultado); //Liberar de la memoria
[/gml]