Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

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


Mensajes - cristopher2545

Páginas: 1 2
1
Preguntas y respuestas / Re:variables con memoria
« en: Agosto 09, 2020, 09:26:49 am »
Buenas,
Lo primero de todo ten cuidado con llamar a tus variables igual que algunas palabras reservadas del Game Maker, en este caso score es una variable built-in, si intentas llamar a tu variable de esta forma: global.score ,al intentar compilar el proyecto deberia darte un error.

Te recomiendo no usar una variable global por cada score que quieras guardar, yo usaría un array, lista, mapa, lo que sea para almacenarlo. en lugar de tener global.score_congelado, global.score_congelado2, global.score_congelado3, etc, etc...

Algo así:


//CREATE
global.my_score = 0;
global.scores_congelados = ds_list_create();


//STEP
if (global.my_score >=500 && is_undefined(global.scores_congelados [| 0])) {
    ds_list_add(global.scores_congelados , 500);
}

if (global.my_score >=700 && is_undefined(global.scores_congelados [| 1])) {
    ds_list_add(global.scores_congelados , 700);
}

De este modo tendrias almacenado en la posicion 0 y 1 de tu lista los valores 500 y 700, pudiendo ampliar la lista lo que quieras.
Luego si quieres mostrar u operar con estos valores solo tendrias que acceder a la posicion de la lista que quieras.

Por cierto, ¿puede ser que no te estuviese funcionando porque estabas pisando continuamente el valor de global.score_congelado?
Si tenías algo así:

if (global.score >500) 
global.score_congelado= global.score;

global.score_congelado se estaría actualizando constantemente al valor de global.score

Espero que te sirva, un saludo.

Los siguientes usuarios dieron las gracias a este tema: cristopher2545

2
Preguntas y respuestas / Re:Varias A.I eligiendo diferentes objetivos
« en: Mayo 31, 2020, 03:05:51 pm »
Pon una variable en el objeto mesa que indique si está ocupada
ocupada = false;

El objeto cliente puede buscar una mesa vacía así
mesaObjetivo = noone; // al principio no hay objetivo

with (objMesa) {// revisar todas las mesas
    if (ocupada == false) {// si una mesa no está ocupada
        other.mesaObjetivo = id; // se convierte en objetivo
        ocupada = true; // ahora está ocupada
        break; // terminar de revisar las mesas
    }
}
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

3
Preguntas y respuestas / Re:Escribir datos en .ini hosteado en la red
« en: Diciembre 03, 2019, 04:51:09 pm »
Me parece que no hay forma de hacerlo en GameMaker directamente. Una manera sería teniendo un script en php que edite el archivo .ini y haces un POST desde GameMaker.

Un saludo
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

4
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 06, 2019, 12:53:12 am »
El único problema que tiene este algoritmo es que, la instrucción mas importante:
  tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
Podría dar un numero repetido y el ciclo contaría de todas maneras la iteración. En el peor de los casos se dará para un elemento repetido y no habrán 3 elementos seleccionado sino 2 o para peor, solo 1.
Lo que cabría hacer es, verificar, que el número que saca "tanteo" no está repetido.
  tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
 if (lista[tanteo] == 0)
     lista[tanteo] = 1;
  else
      i -= 1;  //repetir el ciclo restando -1, para decir que no cuente esta vuelta. (Aclaro que esto para mi desde un punto estructural siguiendo el paradigma de programacion estructurada, esta super mal XD )

El problema con este algoritmo es, lo que se llama "aplazamiento indefinido", que en el peor de los casos cae siempre en un espacio ocupado y se repite innecesariamente muchas iteracion.
Por lo que:No es la mejor manera, pero sigue siendo una solución corta de implementar. <3

Lo hice sin probarlo  :-[ :-[ Pues gracias por corregirme
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

5
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 03, 2019, 05:58:16 am »
Yo lo haria usando un 2Darray que contenga los nombres y su cantidad, y una lista para elegir 3 valores al azar.
item[0,0]="peine"
item[0,1]=0
item[1,0]="cepillo"
item[1,1]=0
item[2,0]="jabon"
item[2,1]=0
item[3,0]="corta"
item[3,1]=0
item[4,0]="papel"
item[4,1]=0
item[5,0]="pasta"
item[5,1]=0
item[6,0]="desodorante"
item[6,1]=0
item[7,0]="toalla"
item[7,1]=0
item[8,0]="crema"
item[8,1]=0
item[9,0]="esponja"
item[9,1]=0

randomize()

lista=ds_list_create()

for(i=0;i<10;i+=1) {ds_list_add(lista,i)}

ds_list_shuffle(lista)

for(i=0;i<3;i+=1) {item[ds_list_find_value(lista,i),1]=1}

Los siguientes usuarios dieron las gracias a este tema: cristopher2545

6
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 03, 2019, 02:07:27 am »
Bueno Yo lo haria de esta forma...

Código: [Seleccionar]
var tanteo, maxObj, Lista, ListaMax;
maxObj = 2; // Numero de repeticiones (numero maximo de objetos tanteados)
ListaMax = 10; // Espacio de la lista

var i;
for(i=0;i<ListaMax;i+=1)
    {// Vaciar Lista
     Lista[i] = 0;
    }

var i;
for (i=0;i<maxObj;i+=1) // Repetir el ciclo hasta llegar al limite de objetos en este caso "3"
    {// Tantear maxObj que tienen que ser ajustados
     tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
     
     Lista[tanteo] = 1; // Ajustar como creado o elegido como lo llames
    }

PD: Ya el array Lista tiene que ser declarado anteriormente o dara error otra opcion seria usar ds_list.
El único problema que tiene este algoritmo es que, la instrucción mas importante:
  tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
Podría dar un numero repetido y el ciclo contaría de todas maneras la iteración. En el peor de los casos se dará para un elemento repetido y no habrán 3 elementos seleccionado sino 2 o para peor, solo 1.
Lo que cabría hacer es, verificar, que el número que saca "tanteo" no está repetido.
  tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
 if (lista[tanteo] == 0)
     lista[tanteo] = 1;
  else
      i -= 1;  //repetir el ciclo restando -1, para decir que no cuente esta vuelta. (Aclaro que esto para mi desde un punto estructural siguiendo el paradigma de programacion estructurada, esta super mal XD )

El problema con este algoritmo es, lo que se llama "aplazamiento indefinido", que en el peor de los casos cae siempre en un espacio ocupado y se repite innecesariamente muchas iteracion.
Por lo que:
Citar
cual seria la manera mas eficiente [...]
No es la mejor manera, pero sigue siendo una solución corta de implementar. <3
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

7
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 03, 2019, 01:06:06 am »
Bueno Yo lo haria de esta forma...

Código: [Seleccionar]
var tanteo, maxObj, Lista, ListaMax;
maxObj = 2; // Numero de repeticiones (numero maximo de objetos tanteados)
ListaMax = 10; // Espacio de la lista

var i;
for(i=0;i<ListaMax;i+=1)
    {// Vaciar Lista
     Lista[i] = 0;
    }

var i;
for (i=0;i<maxObj;i+=1) // Repetir el ciclo hasta llegar al limite de objetos en este caso "3"
    {// Tantear maxObj que tienen que ser ajustados
     tanteo = irandom(ListaMax); // Aleatoriedad del tanteo a elegir
     
     Lista[tanteo] = 1; // Ajustar como creado o elegido como lo llames
    }

PD: Ya el array Lista tiene que ser declarado anteriormente o dara error otra opcion seria usar ds_list.
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

8
Preguntas y respuestas / Re:Lista de elección aleatoria
« en: Agosto 02, 2019, 03:00:25 pm »
Hace nada respondí un tema sobre inventario, que si uno lo abstrae de una manera conveniente podrías convertirlo en lista.
Personalmente te recomiendo usar las funciones para listas: ds_list_*
Ya que estas cuentan con funciones muy interesantes que a la par de útiles, como mezclar y sacar elementos. Básicamente, lo que necesitas.

Dado que, tu lista de artículos está conformado por un grupo de objetos que pueden instanciarse:
1) Yo crearía la lista y colocaría el nombre de los objetos
2) Mezclaría la lista
3) Sacaría el elemento que esta al tope
4) Lo instanciaría
5) Mezclaría la lista
6) Sacaría el elemento que esta al tope
7) Instanciaría ese elemento
8 ) Mezclaría la lista
9) Sacaría el elemento que esta al tope
10) Instanciaría ese elemento

Entonces tendrías tres instancias de objetos distintos.

Hmmm, en otro caso, si son simplemente variables, podrías hacer un ciclo que recorra la lista indefinidamente, iniciadas con 0 al inicio, e ir usando un contador que vaya registrando la cantidad de unos que se ponen aleatoriamente dentro de la lista.

Saludos!
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

9
Preguntas y respuestas / Re:Problema con plataformas giratorias
« en: Mayo 22, 2019, 06:26:23 am »
Saludos!!

una consulta el segundo código en que objeto lo tienes?.
He probado el siguiente código con una plataforma que se mueve  hacia arriba:

evento step de la plataforma:
Código: [Seleccionar]
if place_meeting(x,y-4,obj_player){obj_player.y-=1}
y-=1;
 

el código verifica si  el jugador se encuentra arriba , y si lo esta mueve al jugador 1 pixel hacia arriba en cada momento.
y como la plataforma también se mueve a la misma velocidad.

por el momento no me ha dado errores, lo he probado en todas las direcciones,puedes intentar implementarlo en tu código  para ver si funciona!   
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

10
Preguntas y respuestas / Re:Sumar inputs del teclado
« en: Marzo 01, 2019, 06:58:01 am »
Hola cristopher2545! Le podés aplicar álgebra booleana.

Lo que querés hacer es lo que haría la puerta lógica "AND". En álgebra booleana esto se expresa de esta forma:
Con dos valores:
A * B = B * A
O con tres valores
(A * B) *C = A * (B * C) = A * B * C

Aplicándolo a lo que querés hacer vos quedaría así:
//Las teclas las definís vos según tu necesidad
var tecla_a = keyboard_check(tecla);
var tecla_b = keyboard_check(tecla);
var tecla_c = keyboard_check(tecla);

//Primer caso (TECLA A + TECLA B = salto)
if (tecla_a * tecla_b){
    //Ejecutar un script de salto
    salto();
}

//Segundo caso (TECLA A + TECLA B + TECLA C = sprintar)
if (tecla_a * tecla_b * tecla_c){
    //Ejecutar un script de sprint
    sprint();
}

Lo que sucede es que, al presionar las teclas, las variables se actualizan a 1. Y al soltar, a 0.
Suponé que estás presionando las teclas "a" y "b":
if (tecla_a * tecla_b *tecla_c) {...}
//Es igual que:
if (1 * 1 * 0) {...} //1 * 1 * 0 = 0, que es false
Se tiene que presionar las 3 teclas al mismo tiempo para que ese evento se ejecute.

Te recomiendo que leas información sobre álgebra booleana. Este tema aplicado a la programación es muy útil.
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

11
Preguntas y respuestas / Re:rastro de partículas usando sprites
« en: Marzo 22, 2018, 05:44:36 am »
Puedes modificar el código del evento step de esta forma
if (piso == false)
{
  // updating the lists
  ds_list_add(trail_x, x);
  ds_list_add(trail_y, y);

  // limiting the lists
  if ds_list_size(trail_x) > trail_limit
  {
    ds_list_delete(trail_x,0);
    ds_list_delete(trail_y,0);
  }
}
else //piso == true
{
  // reduce the lists
  if ds_list_size(trail_x) > 0
  {
    ds_list_delete(trail_x,0);
    ds_list_delete(trail_y,0);
  }
}
(el valor de piso debes asignarlo antes de ese bloque de código)

La sugerencia de 3dgeminis es buena, simplificaría mucho las cosas.
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

12
Preguntas y respuestas / Re:rastro de partículas usando sprites
« en: Marzo 21, 2018, 10:49:09 pm »
Yo para esos casos usaria un objeto que haria de rastro, y controlaria ahi el image_alpha y demas.
Desde el jugador los iria creando cada cierto tiempo solo cuando no esta en el suelo.
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

13
Preguntas y respuestas / Re:empujar una caja
« en: Diciembre 22, 2017, 07:04:45 am »
Hola!!! yo te diría que el que se fija si lo están moviendo sea la caja. es decir en el evento step de la caja pones
Código: [Seleccionar]
if keyboard_check(vk_left) && place_meeting(x+1,y,personaje_obj)
{
 x -= 3

}

if keyboard_check(vk_right) && place_meeting(x-1,y,personaje_obj)
{
 x +=3
 
}

yo en lo personal me manejo con cooredenadas y no con velocidades, pero en este caso no creo que te resulte un problema.
espero haber sido de ayuda!!!!
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

14
mhhh pero de todas formas si no tienes registrado tu proyecto con derechos de autor cualquiera puede tomarlo modificarlo y hacerlo de el y si lo registra como suyo entonces tu sales perdiendo lo mas recomendable es no mostrar mucho contenido que no tengas registrado a tu nombre porque si no cualquiera no importando cuantos filtros o cosas le pongas podra tomar lo que se le de la gana y hacerlo propio.

me ocurrió una vez y ahorita estoy lamentándome todavía entre mas poco conocido seas mas facil es robar ideas para hacer proyectos propios
Interesante, tomando en cuenta que soy de Chile ¿que te parece este sitio para dejar constancia?
https://www.chileatiende.gob.cl/fichas/ver/1120

pues absolutamente nada debes de registrarlo si quieres mostrarlo enserio no es por austar pero es facil que te roben las cosas no importa lo que pongas pero teniendo tu juego registrado si alguien lo plagia puedes ir a juicio y demostrar que es tuyo
Bueno queda claro que registrarlo legalmente en tu país de origen bajo algún organismo gubernamental, parece la mejor opción, lo bueno es que you tube tiene una base de datos que registra las fechas y actualizaciones de un vídeo, por términos de antigüedad tendría esa ventaja asegurada ¿no lo crees?  :-\

no tienes ninguna ventaja ya que si la otra persona registra el contenido a su nombre tu te quedaras indefenzo por eso pagas para registrar tu producto porque te dan papeles que aseguran que eres el creador y dueño del mismo ni los registros de youtube pueden salvarte porque no hay pruebas de que tu seas el creador

pongo un ejemplo imaginemos que soy un juez en la corte y alguien mas tomo tu proyecto y lo hizo propio tu llevas a tu abogado yl la unica prueba que tu llevas es que subiste primero el proyecto a youtube y el otro tipo lleva el acta de registro de derechos de autor siendo logicos el juez tomaria la carta porque es una prueba con nombre y firmas del gobierno tu perderias porque no tienes mas pruebas y ciertamente tu te conviertes en el plagio

de donde saque esto? hace meses que voy con un abogado que me da asesoria legal contra este tipo de cosas y ah funcionado
Vaya al parecer tienes mas experiencia en esto de lo que pensaba en un principio, el que me digas que mis actuales intentos por proteger mi trabajo son casi completamente inútiles, me pone en una situación en la que me siento inseguro de mi mismo por continuar con este método, al grado de que podría entrar en un estado paranoico ¿te importaría contarme como has hecho el procedimiento? pues por lo que he visto en la DDI (Departamento de Derechos Intelectuales), esto se puede hacer llenando un formulario desde la residencia de uno, como también visitando el lugar donde se encuentra el edificio correspondiente, como hay varios métodos para hacer las cosas, me vendría bien escuchar los consejos y vivencias de alguien que ya esta metido en estos asuntos, de seguro debes tener una historia bastante interesante que contar sobre asuntos legales.  :)
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

15
Preguntas y respuestas / Re:Modificar la velocidad de la musica
« en: Octubre 08, 2017, 08:27:57 am »
Usa audio_sound_pitch, el primer argumento puede ser la id de un sonido ya en memoria o la id de un asset de audio, si es el primero solo afectará esa instancia del sonido, si es la segunda afectará todas las instancias presentes y futuras de dicho asset. El segundo argumento es la velocidad, es multiplicativo, o sea que si quieres que el sonido vaya al doble de la velocidad normal usas 2 y si quieres que vaya a la mitad de velocidad normal usas 0.5.
Los siguientes usuarios dieron las gracias a este tema: cristopher2545

Páginas: 1 2