Noticias

¡Ayuda a la Comunidad GM, haz una donación!

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

Páginas: 1 2
16
Preguntas y respuestas / Re:Mejor manera de crear fondos?
« en: Mayo 07, 2019, 05:50:36 am »
GMS 2 utiliza un sistema distinto al de GMS 1 para los tiles, es más eficiente pero más rígido, no se pueden colocar tiles desalineados con la grilla, y la grilla es automáticamente del tamaño de los tiles.

Para colocar tiles "desalineados" hay que usar otros métodos, por ejemplo, se puede usar otra capa para tiles ligeramente movida:


Pero esa es, en mi opinión, una solución de poco uso practico ya que afecta todos los tiles en la capa, una mejor alternativa seria cambiar el tamaño esperado de los tiles a la mitad, un cuarto o inclusive menos del tamaño real, y utilizar tiles en grupo o, mejor aún, pinceles para colocar los tiles en el room:




Finalmente, esta la opción de colocar sprites, sin objeto asociado, en una capa de recursos. Los sprites se comportan de la manera que se comportaban los tiles en GMS 1, al mantener presionado control mientras se colocan se puede ignorar la grilla, y la grilla se puede cambiar de tamaño:

Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

17
¿Usas un objeto para detectar colisión con los botones? Es más eficiente usar la función point_in_rectangle o position_meeting
Las coordenadas de la GUI son independientes de las coordenadas de la room. Debes usar las funciones device_mouse_x_to_gui y device_mouse_y_to_gui
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

18
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

19
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

20
intent esto, veo errores en el codigo o al menos una sintaxis que en otros lenguajes no deberia ser:

yo lo haria de la siguiente manera:

if( keyboard_check_released( ord( "I" ) ) )
{
     if( !instance_exists( ob_inventario ) )
     {
             instance_create( room_width/2, room_height/2,-1 ,   obj_inventario ); 
     }
     else
     {
             with (obj_inventario)
                      {instance_destroy();}
     }
}
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

21
Hola Fashion_Trozos

El problema es que se ejecutan ambos bloques de código al mismo tiempo, entonces creas y destruyes el inventario en el mismo step.
Te sugiero cambiar la estructura por un "if-else", de esta forma:
Código: [Seleccionar]
if keyboard_check_pressed(ord("I")) {
if instance_exists(ob_inventario) = false { instance_create_depth(room_width/2,room_height/2,-1,obj_inventario) }
else { with (obj_inventario) instance_destroy() }
}
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

22
Preguntas y respuestas / Re:No consigo saltar linea de texto! :GMS:
« en: Abril 03, 2019, 09:09:10 pm »
puedes marcar el post como [SOLUCIONADO] y cambia el icono de tu pregunta porfa, hay que mantener lo major que podamos el foro.
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

23
Preguntas y respuestas / Re:No consigo saltar linea de texto! :GMS:
« en: Abril 03, 2019, 01:22:22 am »
en GMS2 cambio el salto de line a su codigo de programacion intenta con lo siguiente:

'\n' sin comilla simple
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

24
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

25
Preguntas y respuestas / Re:Como usar paths para hacer algo aleatorio?
« en: Marzo 19, 2019, 05:57:52 am »
Revisa el manual, ahi tienes todod para hacerlo : https://docs.yoyogames.com/source/dadiospice/002_reference/paths/index.html
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

26
Preguntas y respuestas / Re:Como ir perdiendo vida/hambre/energía
« en: Marzo 18, 2019, 11:56:44 pm »
tienes que darte cuenta que en cada step declaras que la alarma estara en tantos fps, si quieres activarla desde el evento step como un mecanismo automatico pues coloca.

Código: [Seleccionar]
if alarm[1] >=0 then alarm[1] = room_speed *2
asi cada vez que esta activada, el mismo mecanismo no lo ejecuta para que siga reduciendo su tiempo
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

27
prota_parado

image_speed = 0;
iamge_index = 0;

image_index lo tienes mal escrito.

Para agregar a lo que dijo Black_Cat, no te quedes con un solo video, busca todo lo que pueda haber sobre un tema.
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

28
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: Fashion_Trozos

29
Preguntas y respuestas / Re:Animación se repite continuamente
« en: Febrero 25, 2019, 01:28:39 pm »
Chequea si el fantasma ya existe también, en la primera línea de código, añade esto otro:

Código: [Seleccionar]
and instance_exists(objectFantasmaAparicion)=false
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

30
Preguntas y respuestas / Re:Inventario y levantar armas del suelo?
« en: Marzo 26, 2015, 03:07:08 am »
Con el obj_arma use otra colisión también, tal vez mi error es que quedó casi todo igual al de munición.

Para el objeto arma, no debes usar esto:
inventario[balas] += 1

porque el +1 se va a ir al elemento destinado a las balas en el arreglo del jugador. Siguiendo el ejemplo de mi primer respuesta, tendrías que declarar una variable arma = 3, y luego, en el evento de colisión
inventario[arma] += 1
Para que el +1 del arma se vaya a su lugar correcto. No debes mezclar munición con armas.

Ni siquiera me cambia al sprite del hombre con el arma, que puedo estar haciendo mal? :'(
Tienes que verificar que inventario[arma] sea mayor o igual a 1, eso indicaría que tienes un arma.
if (inventario[arma] >= 1)
     sprite_index = sprite_player_con_arma
Los siguientes usuarios dieron las gracias a este tema: Fashion_Trozos

Páginas: 1 2