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

Páginas: 1 2
1
Preguntas y respuestas / Re:No entiendo este pedazo de codigo ¡Ayuda!
« en: Abril 18, 2020, 06:58:56 pm »
Hola, gusto en saludarles.

Código a analizar:
if (place_meeting(x,y+vsp,oWall))
{   while (!place_meeting(x,y+sign(vsp),oWall))
 {    y = y + sign(vsp);  }
 vsp = 0;
}

if(place_meeting(x,y+vsp,owall))
{
De existir un obejto llamado "owall" a una distancia de vsp entonces:

while (!place_meeting(x,y+sign(vsp),owall))
mientras no exista el objeto "owall" a una distancia de un pixel

{
y=y+sign(vsp)
}
Sumarle a su posición Y un pixel

vsp=0
La velocidad debe volverse cero
}



En otras palabras:
Si el player se encuentra verticalmente cerca de un objeto "owall" acércalo a él y vuelve su velocidad cero.

Otras palabras
Si el player tiene un objeto cerca de sus pies, acércalo a él hasta encontrar el objeto.

En otras palabras:
Si el player está a punto de tocar el suelo, que se pegue al suelo y se vuelva la velocidad cero.

Este código al parecer funciona también con las colisiones con el techo, porque está tomando el signo de la vspeed. Por lo tanto está diciendo
 Si el objeto player está saltando y sobre su cabeza se encuentra un techo entonces pégalo al techo pero detén la velocidad.

Este código se esta usando para corregir las colisiones verticales y evitar dos cosas:
1. Evitar que el player traspase los objetos "owall"
2. Evitar que la colisión vertical con los objetos "owall" se vea mal.

El código está correcto y funciona como un imán magnético. Donde el objeto owall atrae con su magnetismo al player, pero esto no quiere decir que se va a quedar pegado sino que antes que el player colisione con el objeto owall se va a pegar a el y su velocidad será cero.

1. El código no hace nada si la distancia es superior a la vsp: Si dos objetos de distinta polaridad están muy separados no se percibirá a simple vista su atracción magnética.
2. El código funciona solo cuando el player está cerca del objeto owall: Si dos objetos magnéticos con carga distinta están cerca entonces existirá atracción magnética.

¿Por qué el código es así?
Cuando colisionamos con un objeto solo necesitamos decirle al player que su velocidad sea cero pero esto no se ve bien porque queda una distancia entre el suelo y el player, entonces surge este código para corregir la distancia.

Código sin corrección de distancia: El player queda en el aire o traspasa la owall
if (place_meeting(x,y+vsp,oWall))
{   
 vsp = 0;
}

Código corregido: el player no traspasa la owall
if (place_meeting(x,y+vsp,oWall))
{   while (!place_meeting(x,y+sign(vsp),oWall))
 {    y = y + sign(vsp);  }
 vsp = 0;
}

¿Porqué vsp y sign(vsp)?
Porque vsp normalmente es mayor que sign(vsp).  La vsp es la velocidad de movimiento y también es la distancia que se recorrerá en el próximo paso. Si el objeto player está saltando la vsp será negativa y el sign(vsp) será -1. Si el player está cayendo entonces la vsp será positiva y el sign(vsp) será 1.

¿Podría presentar fallas este código?
Sí, pero solo cuando la vsp es muy alta. En ese caso el objeto player puede que  no detecte el objeto owall y lo traspase. Para evitar eso se usa otro código.

Todavía hay mucho que explicar de este código pero por ahora solo dejo las imágenes:












Los siguientes usuarios dieron las gracias a este tema: kevinalanbossa

2
Hola

Experimenta con esto: Crea un proyecto nuevo, creale un objeto y en un evento draw o dibujo colocale este código.

Código: [Seleccionar]
//simulando el evento create con la variable score
repeat(!score)
{
cuadricula_ancho=32
cuadricula_alto=32
columnas_totales=floor(room_width/cuadricula_ancho)
filas_totales=floor(room_height/cuadricula_alto)
x2=0
y2=0
score=1
}

//botones
if(keyboard_check(113)){game_restart()}
b1=keyboard_check(vk_left)
b2=keyboard_check(vk_up)
b3=keyboard_check(vk_right)
b4=keyboard_check(vk_down)

x2+=(b3-b1)*5
y2+=(b4-b2)*5

if(x2<0){x2=0}
if(x2>room_width-cuadricula_ancho*6){x2=room_width-cuadricula_ancho*6}
if(y2<0){y2=0}
if(y2>room_height-cuadricula_alto*9){y2=room_height-cuadricula_alto*9}

x=floor(x2/columnas_totales)*cuadricula_ancho
y=floor(y2/filas_totales)*cuadricula_alto

//dibujo
draw_rectangle(x,y,x+cuadricula_ancho,y+cuadricula_alto)
dy=0

texto=x2
draw_text(0,dy,texto)
dy+=12


Puedes modificar las variables cuadricula_ancho y cuadricula_alto.
Los siguientes usuarios dieron las gracias a este tema: Antena

3
Preguntas y respuestas / Re:Manual de Game Maker Studio 2
« en: Marzo 21, 2020, 04:40:51 pm »
Hola.

En el siguiente post encontrarás el manual de Game maker studio 2 en español OFFLINE. para estudiarlo y analizarlo sin conexión a internet.
https://www.comunidadgm.org/general/game-maker-tools/msg138626/#msg138626
Los siguientes usuarios dieron las gracias a este tema: Zhekken

4
Juegos completos / Re:Angel Of Good
« en: Marzo 13, 2020, 11:00:58 pm »
Hola.

Sobrevivir es dificil. Las imágenes en blanco y negro transmiten un sentimiento terrorifico y sobrenatural. Me gustó la idea de hacer una pequeña presentación del player volando al fondo antes de comenzar la partida, es como para que nos preparemos porque el juego ha comenzado. Me gustó la portada. Este juego tiene fragmentos que hay que imitar, voy a agarrar tus ideas. Buen trabajo.

Me has inspirado a crear una herramienta de dibujo.

Los siguientes usuarios dieron las gracias a este tema: masalaja

5
Desarrollo de Scripts / Re:get_version()
« en: Enero 31, 2020, 08:25:06 pm »
Hola.

Mediante su ayuda hemos logrado corregir el problema con Gmk6, agregando al script un proceso que utilizando la función draw_getpixel se escanea el caracter 126 e identifica la diferencia entre Gmk7 y Gmk6. El problea está en que si se convierte un .exe de Gmk6 para que se pueda ejecutar en windows superiores a XP, el script devolverá que es Gm7 porque deja de existir la diferencia entre caracteres. Para finalizar, el programa que permite que un .exe de Gmk6 se ejecute en versiones superiores a Windows xp se llama GM_Convert_Game y está disponible aquí.
Los siguientes usuarios dieron las gracias a este tema: TioGilito22

6
Preguntas y respuestas / Re:Hola me podrian testear esto?
« en: Enero 09, 2020, 12:53:54 am »
Hola, buenas noches



Puedes descargar un ejecutable y un editable para gm4 que tiene la solución Aquí



La solución que propóngo cambia todo el código que estás usando por uno parecido al siguiente código:

Código: [Seleccionar]
///simulando el evento create con la variable score
if(score=0)
{
score=1
//botones
b2=0
d=1 //direccion
s=0// el salto
estado="parado"
v=0 //velocidad
time_eye=0//parpadeo
font_size=12
}

///botones
if(keyboard_check(vk_f2))game_restart()
b1=keyboard_check(vk_left)
b2p=(b2=0)*keyboard_check(ord("Z"))
b2=keyboard_check(ord("Z"))
b3=keyboard_check(vk_right)

//movimiento vertical
if((estado="parado" || estado="caminando")*b2p*(s=0))s=20
if(s)s-=1
while(!place_empty(x,y-s))s-=1
if(s<0)s=0
y+=5-s
while(!place_empty(x,y+2))y-=1

//movimiento horizontal
control=(b1+b3=1)
if(control)
{
 d=1-2*(b1)
 v+=d
}
else
{
 if(abs(v))v-=sign(v)*2
 if(abs(v)<2)v=0
}
if(abs(v)>5)v=5*sign(v)
while(!place_empty(x+v,y-5))v-=sign(v)
x+=v

//control de imagen
if(place_empty(x,y+10)){estado="aire"}else{estado="suelo"}
if(estado="aire"){if(s>5){estado="subiendo"}else{estado="bajando"}}
if(estado="suelo"){if(x=xprevious){estado="parado"}else{estado="caminando"}}
if(estado="subiendo"){if(sprite_index!=2+(d<0)*3){sprite_index=2+(d<0)*3;image_speed=0.2;image_index=0};if(image_index>2){image_index=2}}
if(estado="bajando"){if(sprite_index!=2+(d<0)*3){sprite_index=2+(d<0)*3;image_speed=0.1};if(image_index<3){image_index=3};if(image_index>4){image_index=4}}
if(estado="parado"){if(sprite_index!=0+(d<0)*3){sprite_index=0+(d<0)*3};if(time_eye=0){image_speed=0.2};if(floor(image_index)=2){image_speed=0;image_index=0};if(time_eye>100){time_eye=0}else{time_eye+=1}}
if(estado="caminando"){if(sprite_index!=1+(d<0)*3){sprite_index=1+(d<0)*3;image_speed=0.5}}
draw_sprite(sprite_index,image_index,x,y)

Los siguientes usuarios dieron las gracias a este tema: XxBL100xX

7
Preguntas y respuestas / Re:inersia y movimiento encima de movimiento
« en: Enero 07, 2020, 03:46:51 am »
Hola, buenas noches.


Claro que va a funcionar porque ese move_toward_pint también está trabajando con la hspeed.  El código ofrecido es para el objeto player, puede que presente algunas fallas, recuerda que tienes que cambiar los nombres de los objetos  y puede presentar algunas fallas porque quizas interfiera con otro código de tu personaje.

En la versión para la Game maker 8, le incluí un código de empuje el cual es necesario. La plataforma empuja al jugador cuando este está parado, para que no lo traspase.
Los siguientes usuarios dieron las gracias a este tema: thepromaper

8
Preguntas y respuestas / Re:inersia y movimiento encima de movimiento
« en: Enero 06, 2020, 08:16:39 pm »
Hola,

 :-[ Siento mucho contradecirlo amigo, eso produce una tele transportación como la de Gokú.




Puedes descargar el ejecutable y el editable para Game maker 4 Aquí

El resultado es este, quedó fino...


Esta es la version para game maker 8, puedes descargarla aquí

Los siguientes usuarios dieron las gracias a este tema: xStarLordx, thepromaper

9
Preguntas y respuestas / Re:time line + rutas
« en: Enero 06, 2020, 07:36:37 pm »
Hi, buenas tardes y buen provecho.

Ahora bien, voy a trabajar con suposiciones:

1. supongo que tienes varias rutas
2. supongo que quieres que el enemigo decida cual ruta elegir por si solo
3. supongo que el nemigo decide a donde ir
4. supongo que el enemigo se debe mover por si solo
5. supongo que las rutas son para el enemigo
6. supongo que cada enemigo debe elegir su ruta por si solo

Ya, dejaré de suponer. Ahora bien la pregunta que debistes formular es la siguiente:

¿como hago que el enemigo decida escoger una ruta?
¿como hago para que el enemigo camine por si solo y decida escoger una ruta de tres rutas distintas?
¿como hago para que el enemigo al ser creado decida una ruta cualquiera?

Bien...

Bajo esos datos construí esto:


Ahora tengo una babosa que camina para donde ella quiere y yo no tengo que decirle nada, ella solo toma su camino y toma otro camino y vuelve y toma otro , toma el que ella quiera. Yo nunca termino de saber cual será su próximo paso.

¿Cómo lo conseguí? pues...

con este único codigo en una alarma 0

Código: [Seleccionar]
ruta=1+floor(random(3))
alarm[0]=20

switch (ruta) {
   
        case 1:path_start(ruta_babosa_arriba, 15, path_action_stop, false);
       
        break;
       
        case 2:path_start(ruta_babosa_mitad, 15, path_action_stop, false);
       
        break;
       
       
        case 3:path_start(ruta_babosa_abajo, 15, path_action_stop, false);
       
        break;
       
    default:
       rutas=false
break;
}


Pero supongo que algo faltó, porque el objetivo no es que el objeto se mueva por si solo , al parecer lo que se quiere es usar el time line.... Yavá, un momento yavá.  dejame pensar....
Ya sé..... jejejejejjeje

Glosario:
  Yavá,  en Venezuela esta expresión significa "Dame unos instantes", "Espera un momento", "Dejame respirar", "Dejame hablar", "Dame unos minutos", etc...

SI, LO QUE Quieres es usar un time line para darle distintos movimientos en distintas situaciones entonces olvidamos el alarm[0] bueno no del todo porque vas a colocar un código en el alarm 0... Ya verás.

La solución sería:

1. Colocar tu código en la alarm[0] del enemigo
2. Constuir un time line de la siguiente forma
   En el tiempo 30 colocar una pieza de código con lo siguiente:
Código: [Seleccionar]
   ruta=1
  alarm[0]=1
  En el tiempo 120 colocar una pieza de código con lo siguiente:
Código: [Seleccionar]
  ruta=2
  alarm[0]=1
  En el tiempo 200 colocar una pieza de código con lo siguiente
Código: [Seleccionar]
ruta= 3
 alarm[0]=1


La función de alarm 0 será la de ejecutar el código que en ella se encuentra y eso es todo....... ave a aver avaer..... pues, ami me funcionó , ahora yo le digo a la babosa para donde tiene que ir y cuando se tiene que mover.
Los siguientes usuarios dieron las gracias a este tema: Ikaro3d

10
Preguntas y respuestas / Re:inersia y movimiento encima de movimiento
« en: Enero 06, 2020, 06:46:17 pm »
Hola,

Con el permiso del camarada xStarLordx, le ofrezco esta otra solución.

Código: [Seleccionar]
if(distance_to_object(objeto_plataforma)<5)
{
objeto_especifico=instance_nearest(x,y+5,objeto_plataforma)
if(y<objeto_especifico.y)
{
x+=objeto_especifico.hspeed
}
}

Pero bueno, si no le explico como funciona entonces no podrá hacer nada. Lo primero es traducir lo que dice el código en palabras humanas, esto es lo que dice:

si la distancia a cualquier objeto_plataforma es menor que 5 pixeles entonces procede a hacer lo siguiente
{
A) Hallar el nombre del objeto específico, para trabajar solo con ese y no con otros objetos del mismo tipo
B) Si el objeto player se encuentra sobre el objeto plataforma especificado entonces:
C) Mover la posición X del player en el sentido y a la velocidad del objeto plataforma especificado
}


Este código tiene sus desventajas:
1. Funciona solo si el objeto plataforma móvil, se mueve por causa de su hspeed. Osea va a funcionar si estas moviendo la plataforma movil con la variable hspeed de esta.
2.
Los siguientes usuarios dieron las gracias a este tema: thepromaper

11
Preguntas y respuestas / Re:ayuda con saltosxdd
« en: Enero 05, 2020, 08:28:19 pm »
???



Se me olvidaba que adjunte el editable.....

Descarguelo aqui
Los siguientes usuarios dieron las gracias a este tema: xStarLordx

12
Hola,

Los botones 9 y 10 están colocados en el centro del joystick. No dicen por ningùn lado "STAR Y SELECT" pero como el 9 está a la izquierda y el 10 a la derecha podemos decir que 9 corresponde muy bien con select y 10 con start al igual que los controles de la snes.



Los siguientes usuarios dieron las gracias a este tema: kostra

13
Hola, buenas tardes.

Tengo este mando Genérico echo en china, que muestra solo números en sus botones excepto los 4 del Gatillo L y R. Las palancas tambien pueden ser presionadas y producen los valores 11 y 12.

Los siguientes usuarios dieron las gracias a este tema: kostra

14
Preguntas y respuestas / Re:¿como puedo poner texto en una room?
« en: Diciembre 30, 2019, 07:06:10 pm »
Hola, Fabrilyin. Gusto en saludarlo, mi nombre es Dixon.


No existe algo llamado texto, pero si existe el draw_text(x,y,string). Con esta función puedes agregar texto en cualquier parte de la room. El siguiente código que te voy a dar lo debes colocar en un evento dibujo también llamado draw, dentro de una pieza de código.

Código: [Seleccionar]
///texto
dx=0
dy=0

texto="Veces eliminado: "+string(score)
draw_text(dx,dy,texto)

Las variables dx y dx indicarán la posición donde quieras que aparezca el texto. Pero va a depender de la variable score en este caso, por lo tanto cada vez que una bala del jugador toque al enemigo tienes que sumarle un punto a la variable score así.

Código: [Seleccionar]
score+=1
Los siguientes usuarios dieron las gracias a este tema: Fabriyin

15
Hola, mucho gusto.  ;) mi nombre es Dixon.

Tu código está bien escrito, pero por alguna causa desconocida no funciona de ese modo porque no reconoce el string final. Bueno si lo reconoce como un cero ( 0 ). La siguiente modificación si funciona pero solo para las versiones 5, 6, 7, 8 y Html5 de game maker.

Código: [Seleccionar]
num1 = room_get_name(room) //obtiene el nombre de la habitación
num2 = string_digits(num1) //remueve lo que no son numeros
num3 = real(num2) + 1 // lo convierte a integros y le suma 1
num4 = "rm_level" + string(num3) // lo convierte a string y le suma la parte de rm_level
execute_string("room_goto("+string(num4)+")") // lleva al personaje a la siguiente habitación

room_goto(numb)

Esta función te permite ir a cualquier habitación en tu proyecto de juego, ya sea creado usando código o en el árbol de recursos. Proporcione el valor de ID de sala único (almacenado en la variable para el nombre de la sala, o como una variable devuelta por la función room_add . Tenga en cuenta que la sala no cambiará hasta el final del evento donde se llamó a la función, por lo que cualquier código después esto se ha llamado todavía se ejecutará si en el mismo evento. La advertencia a esto es que cualquier código que cree instancias que se llama después de esto, no creará la instancia y, por lo tanto, debería llamarse antes de cambiar de habitación. Esta función también activará el Evento de fin de sala .
Los siguientes usuarios dieron las gracias a este tema: Leandrotitere2332

Páginas: 1 2