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 - Black_Cat

Páginas: 1 2 3
1
Para poner el codigo GML tiene que ir asi:
Código: [Seleccionar]
[GML]
//codigo
[/GML]
y queda:
//codigo


El codigo que probé funciona perfectamente. En mi caso lo probé como sigue:
Evento create:
variable = 5
alarm[0] = 60
evento alarm0
var a,b;

variable = 8

a = instance_create(100, 0, object0)
b = instance_create(200, 0, object0)

a.variable = self.variable
b.variable = self.variable

instance_destroy();
evento draw:
draw_text(x,y, variable)

Y se cambia perfectamente el valor de las variables a 8 y crea las intancias con dicho valor.
A lo mejor tenés algun codigo que esta conflicuando desde otro lado.
Los siguientes usuarios dieron las gracias a este tema: HexPol

2
Lo que tienes que hacer es asignar uno a uno los atributos a las intancias creadas.
Por ejemplo si yo tengo un obj_perro:
ev_Create
//Evento Create del obj_perro
raza = ""
Inicialmente mi objeto es un perro indefinido, pero me apetece darle una raza en cualquier momento:
//por ejemplo, Alamra0 del obj_perro
raza = "dalmata"
Luego querría crear dos instancias, para ello, necesiarías usar instance_create() y almacenar las instancias nuevas, dentro de variables:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)
Después tendrías que asignar, como se dijo al inicio, los atributos uno a uno:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)

dalmata1.raza = self.raza  
dalmata2.raza = self.raza
Asi asignarias a cada instancia el mismo atributo que tiene el objeto, que las crea.
Luego bastaría con que lo eliminaras:
///cualquier evento dentro de obj_perro
dalmata1 = instance_create(x,y, obj_perro)
dalmata2 = instance_create(x,y, obj_perro)

dalmata1.raza = self.raza  
dalmata2.raza = self.raza

instance_destroy()
Finalmente tendrías un objeto perro, que fue modificado y creó otras 2 instancias modificadas, y luego se destruyó.

Citar
Sé que me explico como un libro cerrado y me ando por las ramas
Lo mejor que podés hacer para explicarte, es poner ejemplo de lo que estás haciendo y lo que querés lograr finalmente.
Pasa mucho de hecho, lo vi en otros foros, de que la gente gasta más tiempo intentando pedir perdon que intentando poner ejemplos para darse a entender XD
Los siguientes usuarios dieron las gracias a este tema: HexPol

3
Preguntas y respuestas / Re:Mover una view al tocar un objeto
« en: Abril 16, 2019, 04:15:13 am »
Creo que ocurre , porque al estar la verificacion de colision dentro del evento step, cada vez que se superpone un borde, la x_view se aumenta.
Por lo que el personaje pasa por encima y la x_view se aumenta muchas veces.

tengo dos soluciones:
1) tendrias que mover al player a una distancia grande de manera que deje de tocar el borde y consecuentemente deje de moverse la x_view al no cumplirse la condicion de colision
2) usar una variable booleana que indique que ya se tocó el borde para no seguir moviendo indefinidamente la x_view
Los siguientes usuarios dieron las gracias a este tema: ElKopiraih

4
amigo te dejo un grafico de como funciona el ciclo for en 4 pasos:
El ciclo for es eso, un ciclo, que se reptite contadas veces. En programación se conoce como "ciclo definido o ciclo finito" puesto que se sabe, cuantas vueltas va a dar el ciclo de antemano.
En nuestro ejemplo del inventario iba a dar 4 vueltas.

analizemos la estructura  de FOR:

1º) se crea una variable contador, generalmente y por comodidad, en muchos lugares se la llama "i" del "iterator" en español iterador. Que es la variable que cuenta las iteraciones(repeticiones de codigo).
Esta parte se ejecuta 1 sola vez. Declara la variable para usarla como contador.

2º) la condicion que repite el ciclo. Esta parte se ejecuta varias veces y te indica la condicion que tiene el ciclo para seguir ejecutandose. Generalmente es un numero entero o una expresion de "i es menor a 10" y de ese estilo para que el ciclo se repita determinada cantidad de veces.

3º) aqui se ejecutan las acciones que se quieren repetir. Todo el codigo dentro se repite cada vez que el ciclo da vuelta.

4º) aqui se aumenta (o disminuye) el contador de manera de que se vaya sumando éste y termine en algun momento la condicion.
Por lo general se le suma de a 1 , raras veces vá hacia atrás o se suman en mas cantidad.
Luego de este 4º paso se vuelve a repetir el 2º paso y así, hasta que la condicion deje de cumplise.

Un ejemplo:

for(i=0; i<2; i++){
         instance_create(o_nave_enemiga, x,y)
         audio_play_sound(snd_campana,1,0);
}
1) Este codigo inicializa la variable "i" en cero.
2) Verifica si la condicion es verdadera. "i" es menor a 3? en efecto, puesto que es igual a cero.
3) se crea una nave espacial y hace un sonido
4) aumenta el contador en 1 (i++ o bien se puede escribir como i+= 1), ahora vale 1
5) se verifica la condicion: "i" es menor a 3? en efecto, puesto que es igual a 1
6) se crea una nave y se hace un sonido
7) se aumenta el contador "i" en 1, ahora vale 2
8 ) se verifica la condicion "i" es menor a 2? no, puesto que es igual a 2, y 2 no es menor a 2.
9) termina el ciclo sin ejecutar acciones. No se vuelve a entrar en él

Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

5
hola amigooou

hay dos maneras de trabajar con arreglos(vectores, arrays, listas, etc).
una es usando los arreglos convencionales de gm:   vector
la segunda es usando listas dinamicas de gm: ds_list_create()

yo te voy a explicar usando arreglos estandar.

primero hay que declarar el arreglo e inicializarlo con un valor que nos indique que esta vacio, por ejemplo vamos a poner el 0:
(Evento Create)
global.MAX = 4; //maximo de slots disponibles en el inventario
for(i=0; i<global.MAX; i++)
      inventario[i] = 0; // el cero indica que no hay nada en el inventario

Esto crea el arreglo con 4 elementos, que son el numero 0 que a efectos practicos, nos indicaria que no tienen items.

Luego, creamos un script desde el panel de recursos, que usaremos para obtener un espacio libre.
scr_obtener_slot
for(i=0; i<global.MAX; i++){  //recorremos el arreglo
      if (inventario[i] == 0)   //si hay un slot que este vacio
           return i;    // devolvemos la posicion que esta desocupada (puede ser 0, 1, 2, 3)
}

return -1;  //en caso de que este todo ocupado, devolveremos el indice -1 que no existe, por lo tanto es un error
Este script nos devolvera el primer indice que esté desocupado. O -1 si esta todo lleno de items.

Luego para dibuijar las cosas tendrias que ir al Evento Draw y colocar algo como:
for(i=0; i<global.MAX; i++){
      draw_sprite(spr_cuadradito_del_inventario, x + (sprite_get_width(spr_cuadradito_del_inventario) * i, y); //esto dibujaria tantos cuadraditos como maximo de slots haya en el inventario
}

for(i=0; i<global.MAX; i++){ //este ciclo dibujaria los items

     if (inventario[i] == "navaja") //si en el espacio "i" hay una navaja, dibujarla
                 draw_sprite(spr_navaja,  x + (sprite_get_width(spr_cuadradito_del_inventario) * i, y);

     if (inventario[i] == "comida") //si en el espacio "i" hay una navaja, dibujarla
                 draw_sprite(spr_comida,  x + (sprite_get_width(spr_cuadradito_del_inventario) * i, y);
}

eso dibujaria el inventario y los items necesarios, Cabe resaltar que los sprites tienen que ser igual tamaño que el sprite que hace de cuadradito en el inventario

Luego la forma de guardar un item, por ejemplo Evento Colision de Player contra Pocima:
var espacio_vacio = scr_obtener_slot();
if (espacio_vacio != -1) //si hay espacio vacio
          inventario[espacio_vacio] = "pocima"

no probe el codigo, pero creo que la idea está
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

6
Preguntas y respuestas / Re:Duda sobre UDP y TCP
« en: Abril 04, 2019, 02:32:53 pm »
Complicado no es realmente, solo que hay que tener en cuenta muchas cosas. Primeo y principal, seria saber sobre como manejar buffers. Puesto que es la manera en que se mandan los datos a trevez del networking en GMS.
Para una explicacion detallada tenés el tutorial de Juca:
https://www.comunidadgm.org/articulos/tutorial-buffers-(parte-1-3)/msg125452/#msg125452

Si querés saber como funciona UDP podés mirar este tutorial de Ashe:
https://www.comunidadgm.org/articulos/tutorial-online-udp-39dll/msg128337/#msg128337
Que si bien usa una vieja DLL, el concepto de como funciona es el mismo. La diferencia con GMS es que tiene un propio evento asincrono para procesar los datos en vez de hacerlo en el evento step.

Si querés una explicacion detallada de como manjar TCP tenés mi tutorial extenso:
https://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/

Ahora, podés leer el tutorial de TCP y tratar de hacer algo con eso.
Una vez que dominés ese protocolo, solo extrapolalo a UDP. Que es en escencia mas sencillo que TCP.

////////////////////////////////////////////////
Revisando la Doc de otro motor(Godot) encontre esto:
https://gafferongames.com/post/what_every_programmer_needs_to_know_about_game_networking/

Está en español de donal trump, pero plantea el asunto el networking bastante especificado para juegos

saludos
Los siguientes usuarios dieron las gracias a este tema: somnus

7
Hola amigo, podrías combinar la respuesta de este post:
https://www.comunidadgm.org/preguntas-y-respuestas/comprobar-una-variable-de-todas-las-instancias-resuelto/msg136770/#msg136770

Que a grandes rasgos, lo que hace es almacenar en un vector todas las instancias creadas de un objeto determinado.
La parte que te tocaría programar sería la de elegir aleatoriamente y luego hacer que el objeto A, siguiera al objeto tomado aleatoriamente.

randomize();
var cant = instance_number(obj_B);
var insta = vector_instancias[irandom(cant)];

move_towards_point(insta.x, insta.y, 5);
Ese codigo lo que hace, es escoger aleatoriamente uno de los tantos objetos B que haya y lo sigue.

Esta un poco tosco y tal, pero creo que la idea se entiende.
Los siguientes usuarios dieron las gracias a este tema: Taki-A

8
Preguntas y respuestas / Re:sonido seguidos
« en: Marzo 23, 2019, 04:14:28 pm »
Efectivamente.
Aunque tambien se puede implementar con una alarma, como dato.
Los siguientes usuarios dieron las gracias a este tema: dubaldo

9
Preguntas y respuestas / Re:sonido seguidos
« en: Marzo 22, 2019, 07:35:59 pm »
Usa audio_is_playing() para verificar que no se esté reproduciendo tal sonido, luego larga el que sigue.

https://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sounds/audio_is_playing.html
Los siguientes usuarios dieron las gracias a este tema: dubaldo

10
Bueno, lo que estás haciendo mal es que, al usar el nombre del recurso "obj_comida" estás diciendo que borre todas las instancias de ese objeto.
En cualquier caso deberías obtener el ID de la instancia a destruir y se destruiría solo esa instancia y no todas.

Yo te recomendaria usar instance_nearest(...):
https://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20functions/instance_nearest.html

Para obtener la instancia mas cercana,  y destruirla:

if distance_to_object(obj_comida) < 3 and keyboard_check_pressed(vk_space)
var comida_cercana = instance_nearest(x,y, obj_comida);
if (comida_cercana != noone)
{instance_destroy(comida_cercana )
    if vida >= 0 {vida +=10}
    if vida > 100 {vida = 100}
    }
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

11
Preguntas y respuestas / Re:no se si alguien pueda ayudarme
« en: Marzo 12, 2019, 01:19:18 am »
Si, efectivamente el problema era la máscara. La definí como MASK en un sprite.
Los siguientes usuarios dieron las gracias a este tema: Diego121221

12
Bueno el problema se da en la segunda condicion, puesto que pide que:
x sea menor a 10 y mayor a 590, cosa que no puede ser.

En todo caso supongo que sería:
x mayor a 10 y menor que 590

Con la coordenada Y pasa exactamente lo mismo.
Los siguientes usuarios dieron las gracias a este tema: WMKILLER

13
Preguntas y respuestas / Re:no se si alguien pueda ayudarme
« en: Marzo 09, 2019, 03:48:30 am »
Bueno amigo hay varias cuestiones.

Uno, no deberias pedir a la gente que mire tu ejecutable y te arregle el problema. Primero porque es cansador, uno abre el proyecto de otro, que está programado de cierta manera y tiene masomenos ponerse en los zapatos para ver como es que funciona internamente.
Segundo, porque así no aprendés realmente cómo de arregla el error o como y porqué se produce.
Pero si aún te interesa saber como se adjunta un archivo, acá esta la solucion:
https://www.comunidadgm.org/propuestas-y-soporte/191c243mo-agrego-un-archivo-(-imagen-audio-demos-juegos-)-en-el-foro/

Dos, no deberías copiar y pegar codigos porque si. Primero porque no se aprende nada si no se lo analiza y entiende. Y segundo porque no todos los codigos son universales, cada uno tiene una manera de hacer las cosas y probablemente no sea compatible uno con el otro.

Tres, al momento de preguntar deberías colocar el código dentro del post para hacer más claro el problema. Primero porque se resuelve mas facilmente la duda al tener el problema puntualmente indicado donde falla y mejor si explicas lo que intentas hacer y como intentaste implementarlo. Segundo porque en un futuro, gente que tenga el mismo problema va a poder ver el problema/la solucion sin tener que navegar por todo el editable.

Todo esto te lo digo con el afan de que aprendás realmente a programar con GM, y para que los demas usuarios futuros se ayuden de la solucion concreta.
Los siguientes usuarios dieron las gracias a este tema: Johann

14
Son bastante malos los tutoriales de hektor profe, para principiantes.
Usa notacion super acoplada y poco intuitivas para los aprendices.

Yo te recomiendo que desaglomerés el programa en algo que sea cómodo, sino pasan cosas como esta: copio todo lo que veo sin entenderlo y ahí esta el problema.

No soy partidario de solucionar problemas de un tuto o de un engine.
Y seguramente suene mala onda pero... mirate el video de nuevo en todo caso.
Los siguientes usuarios dieron las gracias a este tema: NiuWeb, Fashion_Trozos

15
Preguntas y respuestas / Re:VARIABLE PYTHON3.6
« en: Febrero 21, 2019, 11:55:02 pm »
Bueno en el mismo manual está indicado como se usan los bufffers:

https://docs.yoyogames.com/source/dadiospice/002_reference/buffers/index.html

Ahí indica el tamaño que tendrá el buffer en bytes y el "alineamiento" que es decir cada cuantos bytes está separado.
Si yo pongo el alineamiento a 4 bytes, entonces las variables que guarde tendrían que tener ese tamaño o menos.
Acá está la lista de tipos que hay, y cuanto ocupan:
https://docs.yoyogames.com/source/dadiospice/002_reference/buffers/buffer_write.html
Hay que tener en cuenta la conversion de bits a bytes.
Los siguientes usuarios dieron las gracias a este tema: nonoroman

Páginas: 1 2 3