Que tenga BW ilimitado no quiere decir que no te bloqueen la cuenta, en hostinger si excede unos 50mb al día te bloquean la cuenta. Y en un juego del tipo que decís que es enviar datos por segundo saturarías ese límite muy rápido (te lo detectarían como ataque DoS).
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.
407
Preguntas y respuestas / Re:funciones online en gm studio.
Enero 28, 2014, 03:45:52 PM
No te recomiendo enviar todo por servidor web ya que saturarías a los pocos minutos el ancho de banda mensual y te bloquearían la cuenta, yo una vez lo pensé pero un amigo me lo comentó bien el tema xD
Lo mejor es ponerse a ver como enviar datos entre dos computadoras "sin pasar por un servidor", es decir que no necesariamente tengás un servidor abierto si no que el que cree la partida sea el servidor y los demás se conecten. La verdad que el online de GMS es por ahí más complicado que usar 39Dll, pero si buscás en GMC (Game Maker Community) podes llegar a encontrar ejemplos realmente simples y sencillos.
PD: Hay una versión de GMS en la cual no funciona del todo el online en HTML5 ya que pide IE10.
Lo mejor es ponerse a ver como enviar datos entre dos computadoras "sin pasar por un servidor", es decir que no necesariamente tengás un servidor abierto si no que el que cree la partida sea el servidor y los demás se conecten. La verdad que el online de GMS es por ahí más complicado que usar 39Dll, pero si buscás en GMC (Game Maker Community) podes llegar a encontrar ejemplos realmente simples y sencillos.
PD: Hay una versión de GMS en la cual no funciona del todo el online en HTML5 ya que pide IE10.
408
Preguntas y respuestas / Re:¿como hacer una lista desplegable?
Enero 24, 2014, 03:42:38 PM
Probá con este código (lo saqué de GMC):
[gml]file = file_find_first("C:\Some\Folder\*.jar", 0);
num = 0;
while (file != "") {
foundFile[num] = "C:\Some\Folder\" + file;
num += 1;
file = file_find_next();
}
file_find_close();[/gml]
URL: http://gmc.yoyogames.com/index.php?showtopic=526213#entry3872823
Después para crear la lista desplegable creo que tenes que usar la API de windows que viene en extensión por defecto en GM8 y viene con su manual de ayuda.
[gml]file = file_find_first("C:\Some\Folder\*.jar", 0);
num = 0;
while (file != "") {
foundFile[num] = "C:\Some\Folder\" + file;
num += 1;
file = file_find_next();
}
file_find_close();[/gml]
URL: http://gmc.yoyogames.com/index.php?showtopic=526213#entry3872823
Después para crear la lista desplegable creo que tenes que usar la API de windows que viene en extensión por defecto en GM8 y viene con su manual de ayuda.
409
Preguntas y respuestas / Re:como exportar archivos terminados
Enero 24, 2014, 03:38:26 PM
Acá te dejo unos enlaces que encontré:
http://maconwindows.blogspot.com.ar/
https://developer.apple.com/devcenter/ios/index.action
Al parecer es lo mismo que con Android, se necesita la SDK, configurarla, modo debug en el dispositivo con iOS y ejecutar.
En cuanto a Mac, supongo que esa SDK también es compatible, no se la verdad, no puedo probarlo a falta de dispositivos de Apple xD.
http://maconwindows.blogspot.com.ar/
https://developer.apple.com/devcenter/ios/index.action
Al parecer es lo mismo que con Android, se necesita la SDK, configurarla, modo debug en el dispositivo con iOS y ejecutar.
En cuanto a Mac, supongo que esa SDK también es compatible, no se la verdad, no puedo probarlo a falta de dispositivos de Apple xD.
410
Preguntas y respuestas / Re:Ayuda para entender mejor GMS
Enero 23, 2014, 07:04:52 PM
Bueno, desde GM3 se usa más GML que D&D, no simplemente en GMS xD.
A lo que me refiero es que tenes que saber como funcionan los condicionales, casos, bucles y definición de variables en un lenguaje real como es C o sus derivados para entender mejor lo que es GML, va eso es desde mi punto de vista ya que así aprendí yo (en mi caso aprendí mejor la sintaxis programando en PHP).
Acá te dejo unos ejemplos básicos en GML:
Condicional IF, ELSE, ELSE IF:
IF
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
//Se lleva a cabo esta acción
}[/gml]
ELSE
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
//Se lleva a cabo esta acción
} else { //Si no se llega a cumplir la comparación...
//Se lleva a cabo esta otra acción.
}[/gml]
ELSE IF
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
//Se lleva a cabo esta acción.
} else if (variable1 < variable2) { //Si no se cumple el primer caso pero si esta comparación...
//Se lleva a cabo esta acción.
} else { //Si no se llega a cumplir ninguno de los casos anteriores...
//Se lleva a cabo esta otra acción.
}[/gml]
Es importante destacar que dentro de un if podes comprar con == (igual) != (distinto) < (mayor que) > (menor que) <= (mayor o igual que) >= (menor o igual que), pero también los if trabajan recibiendo datos booleanos, es decir que si una variable está en true la va a reconocer y se va a llevar a cabo la acción dentro de los corchetes que es el caso de usar las acciones de GM:
[gml]if (position_empty(32,32)) { //Si esa posición está libre nos va a devolver TRUE y se va a crear el objeto.
instance_create(objCreate,32,32);
}[/gml]
Eso es en cuanto al uso básico del IF, también tenes que recordar que podes tener varios casos dentro de un IF y poder separarlos usando and (&&), or (||) o not (no se si GML lo tiene como not, pero podes usar un ! para negar todo).
Ahora vamos con los Switch, esta función es muy útil para diferenciar casos, por ejemplo, un uso muy común es trabajando con GML y 39Dll para saber que tipo de byte está uno recibiendo, acá te dejo un ejemplo con la sintaxis básica:
[GML]switch miVariable {
case (1):
//Hacer esto.
break;
case (2):
//Hacer esto.
break;
case (3):
//Hacer esto.
break;
default:
//Hacer esto si no coinciden los valores.
break;
}[/GML]
El switch toma la variable que se le asigna y la analiza, si el valor de la variable coincide con uno de los casos va directamente a ese caso, a diferencia del IF que recorre caso por caso hasta dar con el correcto. Cabe destacar que si no se encuentra el valor dentro del caso se puede usar default para se se ejecute esa acción.
Un punto importante a destacar es que el switch no tiene condicionales como ==, <,>, etc.
Ahora pasemos a los bucles, que básicamente lo que hacen es repetir una o más acciones X cantidad de veces.
Los que se usan son: While, Do While y For.
La diferencia entre el While y el Do While es que el último se ejecuta la acción antes de entrar en el bucle.
While:
[gml]var contar;
contar = 0;
while (contar < 10) {
//Acción a realizar.
contar += 1; //Con esto incrementamos el contador para no hacer un bucle infinito.
}[/gml]
Do While:
[gml]var contar;
contar = 0;
do {
//Acción a realizar.
contar += 1; //Con esto incrementamos el contador para no hacer un bucle infinito.
} while (contar < 10);[/gml]
Básicamente esa es la estructura del While y Do While, y como podes ver, en el segundo se va a ejecutar primero la acción y luego entrar en el bucle While.
También aclaro que el bucle While (en general, sea While o Do While) actúa con valores lógicos, es decir que podemos hacer un bucle mientras X variable esté en TRUE y después de X tiempo pasa a FALSE, entonces en ese cambio de estado se detendría el bucle.
Ahora pasemos al último que dijimos que es el bucle For, uno de los más usados.
El bucle for cuenta con 3 partes por así decir, la primera parte que se define la variable a usar, la segunda que compara el valor actual de la variable con el valor que deseamos alcanzar y la última parte es la de incremente o decremento del valor de la variable:
[gml]for (i=0;i<10;i+=1) {
//Acción a realizar.
}[/gml]
Por lo general en los bucles For siempre se comienza desde cero, si se comienza desde uno y querés tener todos los valores tenes que usar i<=10. También aclaro que i+=1 se usa para incrementar el valor del bucle por casa pasada, podes usar un +=1 como un -=1 para el caso en que querrás lograr un decremento del valor de la variable. Otra cosa, puede ser 1 como 2 o 3, o simplemente el valor que uno quiera.
Ahora bien, si no queres que se cumplan todos los ciclos de bucle (ya sea en While o For) podes detenerlos en X ciclo mediante un condicional y el uso de break.
[gml]for (i=0;i<10;i+=1) {
if (!instance_empty(x+i,y+i)) {
break;
}
}[/gml]
En el ejemplo dice que si la posición x+i e y+i (es decir el valor actual de la posición del objeto más el valor de i) no está libre, vamos a salir del bucle.
Eso es más que nada la sintaxis básica en todos los lenguajes, un poco aplicada a GML en algunos ejemplos.
Ahora vamos a pasar a definir las variables en GML.
Cabe destacar que existen 3 formas de definir variables:
Globales: Se ejecutan sobre todos los objetos.
Locales: Se ejecutan únicamente en el objeto que fueron definidas.
Privadas: Se ejecutan únicamente sobre el código donde fueron definidas (var).
Para definir una variable del tipo global creamos un code en el evento Create y ponemos así:
[gml]global.variableEntera = 123;
global.variableTexto = "asd";
global.variableCaracter = 'a';
global.variableLogica = true;[/gml]
Para las variables de tipo Local pasa lo mismo que con las Globales para crearlas, nada más que le sacamos el global.
[gml]variableEntera = 123;
variableTexto = "asd";
variableCaracter = 'a';
variableLogica = true;[/gml]
Ahora bien, para las variables privadas cambia la cosa ya que únicamente la podemos definir sin valores:
[gml]var variableEntera,variableTexto,VariableCaracter,VariableLogica;
variableEntera = 123;
variableTexto = "asd";
variableCaracter = 'a';
variableLogica = true;[/gml]
Estas variables se usan más que nada en pequeños códigos como en los Scripts o en las alarmas o lugares donde no sea de suma importancia recurrir a una variable global o local ya que únicamente la usaríamos en una sola parte del código y no en todo el código.
Bueno, eso es lo básico de GML, espero que te sirva :D
A lo que me refiero es que tenes que saber como funcionan los condicionales, casos, bucles y definición de variables en un lenguaje real como es C o sus derivados para entender mejor lo que es GML, va eso es desde mi punto de vista ya que así aprendí yo (en mi caso aprendí mejor la sintaxis programando en PHP).
Acá te dejo unos ejemplos básicos en GML:
Condicional IF, ELSE, ELSE IF:
IF
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
//Se lleva a cabo esta acción
}[/gml]
ELSE
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
//Se lleva a cabo esta acción
} else { //Si no se llega a cumplir la comparación...
//Se lleva a cabo esta otra acción.
}[/gml]
ELSE IF
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
//Se lleva a cabo esta acción.
} else if (variable1 < variable2) { //Si no se cumple el primer caso pero si esta comparación...
//Se lleva a cabo esta acción.
} else { //Si no se llega a cumplir ninguno de los casos anteriores...
//Se lleva a cabo esta otra acción.
}[/gml]
Es importante destacar que dentro de un if podes comprar con == (igual) != (distinto) < (mayor que) > (menor que) <= (mayor o igual que) >= (menor o igual que), pero también los if trabajan recibiendo datos booleanos, es decir que si una variable está en true la va a reconocer y se va a llevar a cabo la acción dentro de los corchetes que es el caso de usar las acciones de GM:
[gml]if (position_empty(32,32)) { //Si esa posición está libre nos va a devolver TRUE y se va a crear el objeto.
instance_create(objCreate,32,32);
}[/gml]
Eso es en cuanto al uso básico del IF, también tenes que recordar que podes tener varios casos dentro de un IF y poder separarlos usando and (&&), or (||) o not (no se si GML lo tiene como not, pero podes usar un ! para negar todo).
Ahora vamos con los Switch, esta función es muy útil para diferenciar casos, por ejemplo, un uso muy común es trabajando con GML y 39Dll para saber que tipo de byte está uno recibiendo, acá te dejo un ejemplo con la sintaxis básica:
[GML]switch miVariable {
case (1):
//Hacer esto.
break;
case (2):
//Hacer esto.
break;
case (3):
//Hacer esto.
break;
default:
//Hacer esto si no coinciden los valores.
break;
}[/GML]
El switch toma la variable que se le asigna y la analiza, si el valor de la variable coincide con uno de los casos va directamente a ese caso, a diferencia del IF que recorre caso por caso hasta dar con el correcto. Cabe destacar que si no se encuentra el valor dentro del caso se puede usar default para se se ejecute esa acción.
Un punto importante a destacar es que el switch no tiene condicionales como ==, <,>, etc.
Ahora pasemos a los bucles, que básicamente lo que hacen es repetir una o más acciones X cantidad de veces.
Los que se usan son: While, Do While y For.
La diferencia entre el While y el Do While es que el último se ejecuta la acción antes de entrar en el bucle.
While:
[gml]var contar;
contar = 0;
while (contar < 10) {
//Acción a realizar.
contar += 1; //Con esto incrementamos el contador para no hacer un bucle infinito.
}[/gml]
Do While:
[gml]var contar;
contar = 0;
do {
//Acción a realizar.
contar += 1; //Con esto incrementamos el contador para no hacer un bucle infinito.
} while (contar < 10);[/gml]
Básicamente esa es la estructura del While y Do While, y como podes ver, en el segundo se va a ejecutar primero la acción y luego entrar en el bucle While.
También aclaro que el bucle While (en general, sea While o Do While) actúa con valores lógicos, es decir que podemos hacer un bucle mientras X variable esté en TRUE y después de X tiempo pasa a FALSE, entonces en ese cambio de estado se detendría el bucle.
Ahora pasemos al último que dijimos que es el bucle For, uno de los más usados.
El bucle for cuenta con 3 partes por así decir, la primera parte que se define la variable a usar, la segunda que compara el valor actual de la variable con el valor que deseamos alcanzar y la última parte es la de incremente o decremento del valor de la variable:
[gml]for (i=0;i<10;i+=1) {
//Acción a realizar.
}[/gml]
Por lo general en los bucles For siempre se comienza desde cero, si se comienza desde uno y querés tener todos los valores tenes que usar i<=10. También aclaro que i+=1 se usa para incrementar el valor del bucle por casa pasada, podes usar un +=1 como un -=1 para el caso en que querrás lograr un decremento del valor de la variable. Otra cosa, puede ser 1 como 2 o 3, o simplemente el valor que uno quiera.
Ahora bien, si no queres que se cumplan todos los ciclos de bucle (ya sea en While o For) podes detenerlos en X ciclo mediante un condicional y el uso de break.
[gml]for (i=0;i<10;i+=1) {
if (!instance_empty(x+i,y+i)) {
break;
}
}[/gml]
En el ejemplo dice que si la posición x+i e y+i (es decir el valor actual de la posición del objeto más el valor de i) no está libre, vamos a salir del bucle.
Eso es más que nada la sintaxis básica en todos los lenguajes, un poco aplicada a GML en algunos ejemplos.
Ahora vamos a pasar a definir las variables en GML.
Cabe destacar que existen 3 formas de definir variables:
Globales: Se ejecutan sobre todos los objetos.
Locales: Se ejecutan únicamente en el objeto que fueron definidas.
Privadas: Se ejecutan únicamente sobre el código donde fueron definidas (var).
Para definir una variable del tipo global creamos un code en el evento Create y ponemos así:
[gml]global.variableEntera = 123;
global.variableTexto = "asd";
global.variableCaracter = 'a';
global.variableLogica = true;[/gml]
Para las variables de tipo Local pasa lo mismo que con las Globales para crearlas, nada más que le sacamos el global.
[gml]variableEntera = 123;
variableTexto = "asd";
variableCaracter = 'a';
variableLogica = true;[/gml]
Ahora bien, para las variables privadas cambia la cosa ya que únicamente la podemos definir sin valores:
[gml]var variableEntera,variableTexto,VariableCaracter,VariableLogica;
variableEntera = 123;
variableTexto = "asd";
variableCaracter = 'a';
variableLogica = true;[/gml]
Estas variables se usan más que nada en pequeños códigos como en los Scripts o en las alarmas o lugares donde no sea de suma importancia recurrir a una variable global o local ya que únicamente la usaríamos en una sola parte del código y no en todo el código.
Bueno, eso es lo básico de GML, espero que te sirva :D
411
Preguntas y respuestas / Re:Ayuda para entender mejor GMS
Enero 23, 2014, 03:08:50 AM
Para comenzar a programar en GML (que el título dice GMS xD) te recomiendo primero aprender la sintaxis básica de un lenguaje "real", en mi caso empecé con PHP (que la sintaxis es la misma que GML a excepción de los índices que en GML empiezan de 1 y no de 0 como los lenguajes desentiendes de C). Luego comenzá con ejemplos y tutoriales, eso siempre ayuda.
412
Preguntas y respuestas / Re:conexion con hamachi
Enero 23, 2014, 03:04:17 AM
Lamentablemente no, si o si necesita pasar la información (ya sea cifrada o no) por los servidores de LogIn para luego retransmitir dicha información a los demás usuarios conectados dentro de esa misma red Hamachi.
413
Preguntas y respuestas / Re:Ayuda con resoluciones
Noviembre 29, 2013, 03:57:11 AM
Lo que se me ocurre es que te pongás a probar con las propiedades de room_width, room_height, view_wview[0...7
] y view_hview[0...7].
Después buscá en Mr.Google las resoluciones más usadas en Android, es decir de teléfono móvil, tablet, etc y lo manejas todo con esas funciones.
] y view_hview[0...7].
Después buscá en Mr.Google las resoluciones más usadas en Android, es decir de teléfono móvil, tablet, etc y lo manejas todo con esas funciones.
414
Preguntas y respuestas / Re:Saber instancias siguiente room
Noviembre 28, 2013, 03:55:45 PM
A mi lo que se me ocurre es que podrías iniciar desde la room que queres saber las instancias, crear un script o un código simple que almacene todas las instancias en un *.txt o cualquier archivo y cuando termine de hacer eso que salte a la primer habitación. Si todo sale bien el usuario no se tendría que dar cuenta del cambio de room.
415
Preguntas y respuestas / Re:ayuda con la destruccion
Noviembre 28, 2013, 03:35:33 PM
Vengo a seguir aportando con mi super manejo de alarmas que ya le agarré la mano xD
[gml]
if (resistencia <76)
{
image_index=0
}
if (resistencia <51)
{
image_index=1
}
if (resistencia <30)
{
image_index=2
}
if (resistencia <25)
{
image_index=3
}
if (resistencia <10)
{
image_index=4;
}
if (resistencia <1 )
{if (alarm[0] < 0 ) { //Esto lo que hace es comprobar que la alarma se haya terminado de ejecutar y la ejecutamos.
alarm[0] = room_speed * 2;
}}
image_speed=0
[/gml]
En el evento alarm[0]:
[gml]
instance_create(x,y,object1);
instance_destroy();
[/gml]
En teoría tendría que funcionar tal cual vos queres.
[gml]
if (resistencia <76)
{
image_index=0
}
if (resistencia <51)
{
image_index=1
}
if (resistencia <30)
{
image_index=2
}
if (resistencia <25)
{
image_index=3
}
if (resistencia <10)
{
image_index=4;
}
if (resistencia <1 )
{if (alarm[0] < 0 ) { //Esto lo que hace es comprobar que la alarma se haya terminado de ejecutar y la ejecutamos.
alarm[0] = room_speed * 2;
}}
image_speed=0
[/gml]
En el evento alarm[0]:
[gml]
instance_create(x,y,object1);
instance_destroy();
[/gml]
En teoría tendría que funcionar tal cual vos queres.
416
Preguntas y respuestas / Re:ayuda con alarmas!!
Noviembre 28, 2013, 12:48:47 AM
Con un simple else if te quedaría de la siguiente forma:
[gml]
contador+=1;
if (contador >= 300) {
if (alarm[0] < 0) {
alarm[0] = round(random(30));
}
} else if (contador > 1000) {
//Acción a efectuarse.
} else if (contador > 1500) {
//Acción a efectuarse.
} else {
if (alarm[0] < 0) {
alarm[0] = round(random(60));
}
}
[/gml]
[gml]
contador+=1;
if (contador >= 300) {
if (alarm[0] < 0) {
alarm[0] = round(random(30));
}
} else if (contador > 1000) {
//Acción a efectuarse.
} else if (contador > 1500) {
//Acción a efectuarse.
} else {
if (alarm[0] < 0) {
alarm[0] = round(random(60));
}
}
[/gml]
417
Preguntas y respuestas / Re:ayuda con la destruccion
Noviembre 28, 2013, 12:23:34 AM
Ponele una alarma en 60 step si la velocidad de tu room es de 30, entonces el script que tenías al momento de hacer clic en esos dos segundos lo pones directamente dentro de la alarma.
418
Preguntas y respuestas / Re:ayuda con alarmas!!
Noviembre 28, 2013, 12:05:50 AM
Mmm...yo creo que es porque los dos tienen el mismo condicional de alarm < 0, entonces, como alarm < 0 sin el contador está primero se va a dar prioridad a ese if. Lo que podes hacer es esto:
[gml]
contador+=1;
if (contador >= 300) {
if (alarm[0] < 0) {
alarm[0] = round(random(30));
}
} else {
if (alarm[0] < 0) {
alarm[0] = round(random(60));
}
}
[/gml]
[EDIT]
En vez de poner el round probá la función irandom(x) que te devuelve un entero directamente. Si no llega a ser compatible con GMS vas a tener que seguir usando round() xD
[gml]
contador+=1;
if (contador >= 300) {
if (alarm[0] < 0) {
alarm[0] = round(random(30));
}
} else {
if (alarm[0] < 0) {
alarm[0] = round(random(60));
}
}
[/gml]
[EDIT]
En vez de poner el round probá la función irandom(x) que te devuelve un entero directamente. Si no llega a ser compatible con GMS vas a tener que seguir usando round() xD
419
Preguntas y respuestas / Re:ayuda con alarmas!!
Noviembre 27, 2013, 10:17:44 PM
Hemm...no se porqué deberías de usar siempre la función randomize, yo nunca la he usado siempre me funciona de por si el código xD
420
Preguntas y respuestas / Re:Como hacer que un npc o mob mire en la dirección que va, no la de un objeto
Noviembre 27, 2013, 06:09:59 PM
Antes que nada, para poder contestar correctamente tu pregunta necesitaríamos saber el código de IA que tiene el NPC y ver como actúa tu NPC, después de eso es cuestión de tocar un poco el código hasta que quede funcionando que no creo que sea tan complicado.