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

Páginas: 1 2 3 ... 7
1
Desarrollo de Scripts / Re:get_version()
« en: Enero 27, 2020, 06:18:43 pm »
Hola, gracias por comentar.

El error fue corregido

2
Desarrollo de Scripts / get_version()
« en: Enero 27, 2020, 04:53:12 am »
Nombre de los creadores: Fabriyin, TheWood y mi persona. En colaboración se logró el objetivo. Ver más
Breve descripción de su función: Indicar la versión de Game maker que se esté usando.
Versión GM utilizada: Todas
Código del script:
Código: [Seleccionar]
{

BATCH="
goto inicio
"
repeat(score=0)
{
version=0
font_color=0.54

antiguas=0
//#antiguas=1

repeat(antiguas)
{
c1="Html"+string("5")
c2=(c1="Html"+"0")
c3=solid
c4=(solid=0)
c5="include"+string("<iostream>")
c6=(c5="include<iostream>")
repeat(c2*c3)version=1
repeat(c2*c4)version=2
repeat(c6)version=3
}

//#bloquear_codigo='
repeat(0){/*}
version=4
//*/}

repeat(version=0){
repeat(font_color=1){version=5}
}

repeat(font_color<1){
repeat(version=0)version=7
repeat(string_length(string(game_id))=9){version=8}
repeat(self=1000000){version="HTML5"}
repeat(instance_id=-4){version="Studio 1"}
repeat(string_length(string(game_id))=1){version="Studio 2"}
}

//fin_bloquear_codigo='


score+=1
}

repeat(antiguas=0)
{
texto="Estas usando Game Maker "+string(version)
draw_text(0,0,texto)
}

repeat(antiguas)
{
texto="Estas usando Game Maker "
draw_text(0,0,texto)
texto=version
draw_text(150,0,texto)
}

BATCH="
:inicio
cls
@echo off
echo Estas usando el CMD de windows
pause>null
"
}

Colocar este script en un evento draw o dibujo.  Se creará una variable llamada versión que nos indicará el numero o nombre del game maker usado.

Nota curiosa: Este script es un código híbrido que trabaja tanto en Game Maker como en el CMD de windows. Para hacerlo funcionar en el cmd de windows tenemos que guardarlo en un block de notas y colocarle la extencion ".bat". Ejemplo: get_version.bat

Anexos:


También agradezco realmente la ayuda de Kostra, Jucarave y eduardo960. Aunque por motivos diversos no logramos intercambiar mucha información. Gracias a Black_Cat por indicar que el código presentaba una falla.

3
Preguntas y respuestas / Re:Bajar Atravesando Plataformas
« en: Enero 24, 2020, 05:04:26 am »
Hola,

No quería responder tarde, pero... Aquí les traigo un código simple que se coloca en el evento draw del player 1. Y no requiere mas nada

Imagen del ejecutable, se pueden ver dos players con forma de pelota verde y roja los cuales interactúan con las plataformas sin problemas.


Bueno, concretamente la plataforma traspasable que presento tiene las siguientes características.

1. Se verifica plataforma solo cuando esta cayendo el personaje como lo indica Black_cat.
2. Fue necesario crear un sistema de colisión como lo sugirió BssString
3. Dos players pueden estar en la misma plataforma sin afectar el movimiento de uno u otro. Como lo indica 3dgeminis
4. La plataforma puede tener cualquier forma, no necesariamente rectangular, puede ser ovoide, piramidal y sin forma definida.
5. La plataforma puede tener cualquier grosor, puede ser de un solo pixel de espesor
6. La plataforma puede girar sobre su eje sin alterar su funcionamiento.

El siguiente código se coloca en un evento draw del player1, mientras el player dos debe ser pariente del uno.
Código: [Seleccionar]
//simulando evento create dentro de eento draw
if(score<2)
{
//botones
b2=0
b4=0

//variables
s=0 //salto
d=1 //direccion
estado="aire" //estados del personaje, si esta en el aire o en el suelo
gravedad=15 //esto es la gravedad que impulsa al personaje al suelo
colision=0 //si se va a evaluar la colision entre la plataforma
player=0
if(score=0){player=1}
if(score=1){player=2}
}
score+=1

//botones
if(player=1)
{
if(keyboard_check(113))game_restart()
b1=keyboard_check(vk_left)
b2p=(b2=0)*keyboard_check(vk_up)
b2=keyboard_check(vk_up)
b3=keyboard_check(vk_right)
b4p=(b4=0)*keyboard_check(vk_down)
b4=keyboard_check(vk_down)
}

if(player=2)
{
//botones
if(keyboard_check(113))game_restart()
b1=keyboard_check(ord("A"))
b2p=(b2=0)*keyboard_check(ord("W"))
b2=keyboard_check(ord("W"))
b3=keyboard_check(ord("D"))
b4p=(b4=0)*keyboard_check(ord("S"))
b4=keyboard_check(ord("S"))
}
//estados del personaje, en el suelo o en el aire
if(place_free(x,y+gravedad)){estado="aire"}else{estado="suelo"}
if(colision){estado="suelo"}

//movimiento y
if(b2p*(s=0)*(estado="suelo"))s=gravedad*2
if(s)s-=1
while(!place_free(x,y-s))s-=1
if(s<0)s=0

y+=gravedad-s
while(!place_free(x,y+1))y-=1


if(colision=0)
{
for(i=0;i<=gravedad;i+=1)
 {
 if((place_meeting(x,y,object2)=0)*(y>yprevious))
  {
  if(place_meeting(x,y+i,object2)){colision=1}
  }
 }
}

if(b4p)colision=0

if(colision){while(place_meeting(x,y+1,object2))y-=1}
if(colision*(place_meeting(x,y+gravedad,object2)=0))colision=0

//movimiento x
control=(b1+b3=1)
if(control)d=1-2*b1
v=floor(gravedad/3)*d
while(!place_free(x+v,y-5))v-=sign(v)
x+=v*control

//salir de la room
if(x>(room_width-10))x=10
if(x<10)x=room_width-10

//dibujo
dy=0

texto="Colision: "+string(colision)
draw_text(0,dy,texto)
dy+=20
texto="estado: "+string(estado)
draw_text(0,dy,texto)
dy+=20
draw_sprite(sprite_index,0,x,y)
 

Para que funcione:
1.   El código debe ser colocado en un evento draw del player 1, el player dos no requiere codigo.
2.   El player dos debe ser pariente del player 1
3.   El Object2 es la plataforma traspasable
4.   los player tienen un sprite sin secuencia de imágenes
5.   La plataforma traspasable no debe ser solida
6.   Las plataformas de los suelos y paredes si deben ser solidas

Pueden descargarlo también por aquí



4
Preguntas y respuestas / Re:time line + rutas
« en: Enero 20, 2020, 01:25:07 am »
Hola.

Puedes hacer que decida la ruta en la primera ruta, de la siguiente manera:

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

Pero, quizás no cuadren los movimientos porque tienes una ruta definida. Por lo tanto tendrías que crear diversas rutas en distintos time lines y la babosa debería decidir no la ruta sinó mas bien el time line con el conjunto de rutas para que todo tu trayecto cuadre.


En la imagen cada ruta corresponde a un time line distinto.



5
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)


6
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.

7
Preguntas y respuestas / Re:Escaleras simples
« en: Enero 07, 2020, 03:28:11 am »
Hola,

Como a mi me ha pasado eso, te voy a dar la respuesta según mis casos.

1. Es lo que yo supongo que está pasando.
2. Es lo que muchas veces me ha pasado.
3. Es lo que me imagino
4. Quizás yo esté equivocado.

Al parecer, el objeto tiene una función que cambia su sprite a "sprite de salto" y sprite de caminar. La cual depende de la distancia que tenga con el suelo. Cuando el objeto sube una escalera, colina o plano inclinado, la distancia con el suelo aumenta y el sistema entiende que el objeto está en el aire y manda a colocar la imagen de salto. Entones parra corregir esto, tienes que entrar en la función que cambia a imagen de salto y encontrar una de las siguientes funciones:

buscar el código que permite cambiar a sprite de salto
buscar el código que permite cambiar a sprite de salto
buscar el código que permite cambiar a sprite de salto

en este código podrás encontrar:

place_empty()
place_free()
place_meeting()

En ella de seguro encontraras un "y+", como por ejemplo

place_empty(x,y+1)
place_free(x,y+1)
place_empty(x,y+2,object_suelo)

Lo que tendrías que hacer, si ese es tu caso, es aumentar el valor que acompaña a y es decir;:

place_empty(x,y+5)

Pero recuerda algo, esto es solo si se trata de ese caso en específico, y tienes que mirar cual función estás modificando, porque si modificas una que no es puedes obtener resultados terribles. Tampoco le pongas un y+30 porque cuando salte, no va a cambiar su imagen a imagen de salto.


8
Hola, buenas noches.

Quieres simular un evento create dentro de un draw, tienes que sacrificar una variable predeterminada del sistema cuyo valor inicial sea cero, entonces mientras sea cero que ejecute un código y luego de ejecutarlo que su valor cambie a 1.  La variable que yo recomiendo sacrificar es la score, porque esta aparece en todas las versiones del game maker y puede ser reemplazada.

Yo casi nunca uso el evento create, yo siempre simulo el evento create con la variable score de la siguiente manera:

Esta es la version encriptada: (inentendible pero funciona) Creo que no funciona en la studio 2, porfavor indicarme si funciona

Código: [Seleccionar]
///simulando el evento create dentro de un evento draw usando la variable score
repeat(score=self+abs(other)-1)
{
///aqui colocas el código que necesites que se ejecute solo una ves.

score=abs(self)
}

esta es la version entendible nivel medio, esta funciona en todas las versiones
Código: [Seleccionar]
//simulando el evento create con la variable score
repeat(!score)
{
score=1
}

y esta es la versión entendible, entendible.

Código: [Seleccionar]
///simulando el evento create con la variable score, también funciona en todas las versiones.
if(score=0)
{
///aqui colocas el codigo inicial

score=1
}


por ultimo:

Esto te va a funcionar solo si no estás usando la variable score para otra cosa...

Código: [Seleccionar]

////Asi no me sal.e q hago mal?

////Create:
if(score=0)
{
Numhealth = 5
muerte = true

score=1
}
///Step:

if(Numhealth <= 0)
{
instance_destroy(objetoboss02);
instance_destroy(objetoboss02d);
instance_destroy(objetoboss02e);
instance_destroy(objetoboss02f);
instance_destroy(objetoboss02z);
instance_destroy(objetoboss022);
instance_destroy(objetoboss0222);

instance_create_layer (800,600,"enemy",objetoboss02x);
}



if (muerte == true)
{
    instance_create_layer (800,600,"enemy",objetoboss02x);
     muerte = false
}


Bueno ahora dejeme indicarle, estoy creando juegos que dependen de un único código, tal es el caso de Vitel toné, y esto me obliga a simular el evento create con la variable score, tambien puedes echarle un vistaso al post de compatibilidad donde he descubierto otras cosas.

9
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í


10
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.

11
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.

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



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

Descarguelo aqui

13
Preguntas y respuestas / Re:ayuda con saltosxdd
« en: Enero 05, 2020, 07:12:42 pm »
 ;) ?????
 ;D

14
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.




15
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.


Páginas: 1 2 3 ... 7