Mostrar Mensajes

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

Mensajes - dixon

226
Hola, saludos a todos.

Resumen: Quiero dibujar una linea mediante código sin usar el draw_line y dibujar un hola mundo sin usar el draw_text. Esto empleando otro lenguaje de programación dentro del Game Maker.

Más Detalles:
Desde hace ya muchos años he tenido la duda de que si game maker puede entender otros lenguajes de programación diferentes al GML. Un día un programador que no conocía game maker, fue a mi casa de visita y colocó ante mis ojos un código en un evento draw que no pude entender y logró algo que ya no recuerdo pero creo que fue un "hola mundo", Luego no quiso darme mas detalles, solo me dio a entender que game maker era muy bueno. Ahora bien, leyendo la documentación del game maker 1.1 de 1999, encontré que se menciona el lenguaje de pascal de la siguiente manera:



Estilo pascal
El intérprete es en realidad bastante relajado. También puede usar código que se parezca mucho a pascal. Puede usar begin y end para delimitar bloques,: = para la tarea, e incluso agregar la palabra en una declaración if o do en un ciclo while. Por ejemplo, el siguiente fragmento de código también es válido:

begin
  x := 10;
  while x>0 do
  begin
    if x>5 then x:=x-5 else x:=x-1;
  end;
end;


Según entiendo esto no me quiere decir que pueda interpretar lenguaje pascal sino que podemos usar el GML en el mismo estilo de pascal. Pues al intentar hacer un hola mundo en pascal con el siguiente código y me dio errores pues no reconoce writeln.

///Esto es un hola mundo en lenguaje pascal.
program Hello;
   begin     
      writeln ('Hola mundo')
   end.   


Para finalizar, esta es mi intención: lograr dibujar mediante otro lenguaje una simple línea sin usar el draw_line, y dibujar un hola mundo sin usar draw_text. Gracias, cualquier idea recibirá un agradecimiento de mi parte.  ;D
227
jajajajaja Kostra como siempre con sus cosas. Gusto en saludarlo de nuevo amigo.

KayasamiX, conmovedor su mensaje yo también viví una experiencia parecida.

FernandoNavarro, yo también aplico ese modo de programación donde se encapsula todo en un código sin usar los eventos keyboard. Pero ahora estoy tratando de encapsular todos el juego en una sola pieza de código, aquí hay mas información. https://www.comunidadgm.org/general/practicando-maxima-compatibilidad/

Aridoazul2, bueno lo que dice KayasamiX es muy cierto, tienes que apasionarte y ya se nota bastante que estas motivado. Aprender game maker es igual que aprender a manejar un avión comercial, es cuestión de ir a los expertos, ver muchos tutoriales, apasionarse y dedicar su vida a ello. La disciplina es importante también. Pero ahora rompiendo la cuarta pared te digo: Game maker se puede convertir en un vicio, la programación de video juegos puede ser muy adictiva,  y como todo vicio puede afectar tus estudios, la relación con tu esposa si tienes, con tus padres, familiares, la sociedad en general y con Dios. Esa es la difícil realidad pero al igual que un programador halla la solución para un código difícil, esta realidad tiene varias soluciones y la que yo he programado es esta: Dedicarme a lo que mas me gusta que es programar en game maker pero creando juegos educativos que sirvan para formarme a mi mismo mientras transmito un conocimiento a mi familia y a la sociedad. Espero que no entres en vicios y halles tu manera de armonizar y sincronizar toda tu vida cual programador de game maker intentando entender como se programa una plataforma en forma de esfera donde la gravedad cambia a 360 grados.

Imagen de yoshi island de super nintendo del nivel llamado "raphael the raven". La gravedad del enemigo, que es un pájaro negro varia de 0 a 360 grados. Esta imágen fue usada para dar a entender que armonizar la vida diaria mientras se programa con game maker es tan complejo como entender la programación de una plataforma 360.


Imagen del video de la presentacion del curso de piloto comercial, fue utilizada para indicar que aprender game maker es como volar un avion comercial, desde lejos parece dificil pero es cuestion de dedicarse, ir a los expertos, tener mucha disciplina, leer manuales y pedirle ayuda a Dios.
228
Hola, gusto en saludarle.

Queria saber si usted se refiere al movimiento de electrones. Ellos viajan de un átomo a otro y vuelven a su órbita.
229
Se ve que va estar emocionante la competencia, este concurso es un juego en si. Compartir este momento competitivo con tantos miembros de esta familia makera es chebre. Hay que buscar una manera de que participemos todos.
230
General / Practicando máxima compatibilidad
Noviembre 02, 2019, 02:08:10 AM
Hola, gusto en saludarles.



He recurrido a todos los manuales. Presiona la siguiente imagen para descargar el paquete completo.


Me encuentro desarrollando código con la máxima compatibilidad posible para todas las versiones del game maker, desde la versión 1.1 del año 1999 hasta la actual studio 2 y estos son los resultados:

Si se coloca este código en un evento draw, se va a dibujar el siguiente personaje.
{

///simulando evento create dentro de un evento draw con variable score.

if(!score)
{
version=0
mousex=0
mousey=0

//background_color=c_black
font_color=c_green
//font_name="Courier New"
font_name="Arial"
font_size=12
pen_color=c_red
screen_width=480
screen_height=384



score=1
}
///evento draw
score+=1
if(score=3 && mousex=0)version=1

if(version)
{
mousex=mouse_x
mousey=mouse_y
}


//evento draw
dy=0

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

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

///dibujo
manx=mouse_x
many=mouse_y
//cabeza
draw_line(manx,many,manx+30,many)
draw_line(manx+30,many,manx+30,many+30)
draw_line(manx+30,many+30,manx,many+30)
draw_line(manx,many+30,manx,many)
///ojos y boca
draw_text(manx,many," 0 0")
draw_text(manx,many+14,"   -")
///tronco
draw_line(manx+15,many+30,manx+15,many+60)
draw_line(manx+15,many+60,manx+10,many+90)///pies isquierdo
draw_line(manx+15,many+60,manx+25,many+90)//pies derecho
draw_line(manx+15,many+40,manx+30,many+60)//brazo irquierdo
draw_line(manx+15,many+40,manx+5,many+60)//brazo derecho
}




Si se coloca este código en el evento draw, se crea una nave y un  control parqa moverla y disparar.
{

///simulando evento create dentro de un evento draw con variable score.

if(!score)
{
version=0
mousex=0
mousey=0

//background_color=c_black
font_color=c_green
//font_name="Courier New"
font_name="Arial"
font_size=12
pen_color=c_red
screen_width=480
screen_height=384

//nave
nx=100
ny=100
nv=5
disparo=0
bax=0
bay=0

score=1
}
///evento draw
score+=1
if(score=50 && mousex=0)version=1

if(version)
{
mousex=mouse_x
mousey=mouse_y
}


//evento draw
dy=0

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

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

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

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

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

blx=10
bly=250
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){nx-=nv}

blx=130
bly=250
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){nx+=nv}

blx=70
bly=190
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){ny-=nv}

blx=70
bly=310
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){ny+=nv}

//boton central
blx=70
bly=250
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){if(!disparo){disparo=1;bax=nx;bay=ny}}

/////////////para disparar
if(disparo)
{
draw_text(bax,bay,"  0");
bay-=10
if(bay<0)disparo=0
}

////////limites de movimiento nave
if(nx<0)nx=0
if(nx>460)nx=460
if(ny>330)ny=330
if(ny<0)ny=0

draw_text(nx,ny,"  /\")
draw_text(nx,ny+12,"  ||")
draw_text(nx,ny+24," /||\")
draw_text(nx,ny+36," ---")
   
}



Formas geometricas: Este código nos muestra cómo se pueden dibujar las figuras geométricas básicas cumpliendo las regla de la geometría.
corregido

{

///simulando evento create dentro de un evento draw con variable score.

if(!score)
{
//background_color=c_black
font_color=c_green
pen_color=c_red
screen_width=480
screen_height=384
score=1
version="nueva"
mousex=0
mousey=0

///nave
ny=100
nx=100
nv=5

//circulo
//cr: radio
//crd: radio deformacion
//cd: direcsion
//ca: circulo angulos internos
cx=250
cy=150
cr=100
crd=0
cd=90
cdm=0
ca=45
p1x=0
p1y=0

}

///evento draw
score+=1
if(score<50 && !mousex=0)version="vieja"

if(score>50)
{
if(version="nueva")
{
mousex=mouse_x
mousey=mouse_y
}

}
else
{
draw_text(100,100,"Presione aquí para evitar errores en versiones viejas")
}

//evento draw
dy=0

texto="Radio: "+string(cr)
draw_text(0,dy,texto)
dy+=12

texto="Angulo: "+string(cdm)
draw_text(0,dy,texto)
dy+=12

texto="Angulo interno: "+string(ca)
draw_text(0,dy,texto)
dy+=12

blx=10
bly=250
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cdm+=5;if(cdm>360)cdm-=360}

blx=130
bly=250
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cdm-=5;if(cdm<0)cdm+=360}

blx=70
bly=190
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cr+=5;if(cr>300)cr=300;}

blx=70
bly=310
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cr-=5;if(cr<5)cr=5}

//boton central
blx=70
bly=250
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)

blx=200
bly=310
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){ca+=5;if(ca>360)ca=360}

blx=260
bly=310
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){ca-=5;if(ca<5)ca=5}

blx=400
bly=10
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
draw_text(blx+5,bly+15,"Trianulo")
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cdm=330;ca=120;cr=100}

blx=400
bly=70
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
draw_text(blx+2,bly+15,"Cuadrado")
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cdm=45;ca=90;cr=100}

blx=400
bly=130
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
draw_text(blx+2,bly+15,"Rombo")
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){cdm=30;ca=60;cr=100}

blx=400
bly=190
draw_line(blx,bly,blx,bly+50)
draw_line(blx,bly,blx+50,bly)
draw_line(blx+50,bly,blx+50,bly+50)
draw_line(blx,bly+50,blx+50,bly+50)
draw_text(blx+2,bly+15,"Circulo")
if(mousex>blx && mousex<blx+50 && mousey>bly && mousey<bly+50){ca=5;cr=100}

i=0
repeat(360/ca)
{
i+=ca
cd=i+cdm
p1x=floor((cx+(cr)*cos(cd*pi/180)));
p1y=floor((cy-(cr)*sin(cd*pi/180)));
p2x=floor((cx+(cr)*cos((cd+ca)*pi/180)));
p2y=floor((cy-(cr)*sin((cd+ca)*pi/180)));
draw_line(p1x,p1y,p2x,p2y);                                                                                                                                   
}


}

//triangulo
//angulo interno: 120
//angulo: 333

//cuadrado
//angulo interno: 90
//angulo: 45

//rombo
//angulo interno: 60
//angulo: 30

//circulo
//angulo interno: 5



Los objetivos a alcanzar a corto plazo son los siguientes:

1. Crear un sistema de colisiones independiente sin uso de mascaras, para comprender el principio de colisión.
2. Crear un sistema 3d básico independiente para todas las versiones, inclusive para las que no cuentan con funciones 3d.
3. Crear un ejemplo de plataforma esferica con gravedad 360 empleando el sistema de colisiones independiente el cual no toma en cuenta las máscaras.
4. Crear juegos codificados que no necesiten ser descargados: agrupar todo en un solo codigo que pueda ser pegado en un evento draw.
5. Multi plataforma: el juego codificado debe contar con la capacidad de ser exportados a cualquier plataforma sin requerir modificación alguna.
6. Crear juegos fusionables: lograr crear una herramienta que me permita fusionar dos juegos codificados para crear un tercero.
7. Multi desarrollo: crear un pequeño motor de desarrollo que me permita programar lo básico del Gmk en entornos cómo Android, linux, Mac, ipad, etc...
8. Multi motor: crear un programa básico que me permita transformar el código de Gmk en código para otros motores de desarrollo como unity, cryengine, godot, etc...

Más detalles sobre la compatibilidad:

1. Game maker 1.1 no cuenta con draw_text() por lo tanto será descartada.
2. Game maker 1.4 si cuenta con draw_text()
3. El ancho de la room compatible para todas las versiones es 480x384 pixeles. Los pixeles finales no podrán observarse por lo tanto debe trabajarse en 479x383


4.Aunque las versiones anteriones a la 4 no usan mouse_x, se pueden adaptar.
5. Todas las versiones usan el draw_line(x,y,x2,y2)
6. Todas las versiones cuentan con la variable score


El siguiente código es compatible con todas las versiones desde la vieja 1.4 del año 2000 hasta la actual studio 2. Debe ser colocado en un evento draw. Este código solo fue creado para contemplar un poco de la compatibilidad existente en todas las versiones, si ejecutamos en cualquier version podremos ver como el mousex se adapta a todas las versiones. Hay que tener en cuenta que aunque una variable predeterminada del sistema como background_color o font_color, no se encuentren en todas las versiones, esto no quiere decir que vallan a generar errores, pues se convierten en variables declaradas.


{

///simulando evento create dentro de un evento draw con variable score.

if(!score)
{
background_color=c_black
font_color=c_green
screen_width=480
screen_height=384
score=1
version="nueva"
mousex=0
mousey=0
}

///evento draw
score+=1
if(score<100 && !mousex=0)version="vieja"

if(score>100)
{
if(version="nueva")
{
mousex=mouse_x
mousey=mouse_y
}
}
else
{
draw_text(100,100,"Presione aquí para evitar errores en versiones viejas")
}

//evento draw
dy=0

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

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

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

}


La intención no es solo que el código sea compatible, sino que el código debe contener todo los recursos del juegos. De esta forma, para adquirir el juego no es necesario que se descargue la aplicación, solo se copia el código y se pega en un evento draw y listo. Para lograr esto he recurrido al ACII ART.

|\-----/|
| o_o |
\_^_/

      \        /\
        )     (  =')*
       (     /    )
         \(___)|

     |\___/,|          (`\
     |_ _     |.----------.) )
    ( T       )            /
(((  ^_    (((  / (((_/

__
.---'----`-.__
'-O-----O---'

__
.---'----`-.__
'-O-----O---'

       __!__
_____(_)_____
       !  !  !

             -----|-----
*>=====[_]L)
                -'-`-




El código final que se pretende obtener, en teoría será compatible para todas las versiones del Gmk y prodrá ser exportado para las distintas plataformas sin necesidad de modificación alguna. Entre estas plataformas se encuentra android. Hay que entender que para programar para pantallas táctiles no es indispensable crear los controles táctiles o teclas virtuales en objetos gui en game maker studio, pues con entender que la posición del dedo en la pantalla es la posición del ratón eso es suficiente.

Por ahora necesito entender el origen de los arrays, porque al no poder utilizarlos en versiones viejas tendré que imitarlos y creo que eso es posible con condiciones if, por que al parecer un array es el resultado de un conjunto de if.

Agradecería cualquier idea.

Aqui voy colocando las variables y funciones que son compatibles para todas las versiones:

1. x
2. y
3. score
4. draw_text(xpos,ypos,string)
5. draw_line(x,y,x2,y2)
6. random(n)

Aquí voy agregando algunos recursos:

Página web para descargar todas las versiones del gmk sin infringir ninguna ley.
gamemaker.cc

Codigos exclusivos para la compatibilidad
Código para utilizar funciones viejas en game makers modernos

{
repeat(!score)
{
font_size=12
font_name="Courier New"
version=2
//#set_font_size(font_size)#set_font_name(font_name)#version=1
score+=1
}
if(version=2)
{
texto="Hola mundo, hola mi nombre es dixon, con d mayuscula estoy programando para game maker tratando de crear la compatibilidad"
dy=100
draw_text_ext(0,dy,texto,12,480)
}

//dibujo
dy=0
texto="Hola mundo"
draw_text(0,dy,texto)
dy+=12
}


código para trabajar en CMD y crear códigos hibridos que puedan ejecutarse en game maker y en el cmd de windows

{
batch="
goto bat
"

///aqui vá todo el código para el game maker


}
:bat
@echo off
echo hola mundo
pause>null



Codigo hibrido de maxima compatibilidad
Este codigo genera un "Hola mudo" en todos los game maker, el el cmd de windows y en exploradores web mediante JavaScript


h="<!--html>
goto inicio

</html-->
<html>
<head>
<title>Mi primera página</title>
<script>
document.clear();
</script>

<script>
document.write('<br> Hola mundox');
</script>

</head>
<body>
</body>
</html>
<!--html>

:inicio
@echo off
cls
echo hola mundo
pause> null

"

draw_text(0,0,"Hola mundo")



*Para ejecutarlo en game maker: tenemos que copiarlo tal cual en un evento draw
*Para ejecurtarlo en el CMD: tenemos que guardarlo en un block de notas con la extensión .bat y luego habrirlo
*Para ejecutarlo en un explorador web: tenemos que guardarlo en un block de notas con la extensión .html y luego habrirlo.
231
Yo deseo participar porque quiero usar el mensaje de la navidad para motivar a las personas a ayudar a los necesitados.
232
Juegos completos / Re:Ruta Astral [Guinxu Jam]
Octubre 29, 2019, 04:22:18 PM
Buenos días camaradas, un saludo cordial
Aquí está el juego Ruta Astral
Aunque no tiene inteligencia artificial
Nos tele transporta a espacio sideral

This Scrolling Shooter es bastante sencillo
En la NASA obtenemos un cohete amarillo
Si montamos la nave y apretamos el gatillo
A todo asteroide hacemos picadillo

Tiene un menú con instrucciones
Donde se explican las teclas y sus funciones
La llave inglesa cura agresiones
Y la pistola produce explosiones

Sus músicas de fondo transmiten alegría
El estilo electrónico energía
Es mezcla simétrica y tecnología
Nosotros bailaremos con esas melodías

Si lo jugamos podremos imaginar
Juegos que en infancia logramos jugar
Gradius y Star force podremos recordar
Y la pc no querremos apagar
233
Juegos completos / Re:LSN
Octubre 26, 2019, 09:16:06 PM
Hola, camarada!

Este es el análisis de tu juego:



Buena música, animadora, activadora, cuando comencé a jugar el juego me había tomado una taza de café y la música me ayudo bastante a aumentar la autoestima, lo voy a considerar para alguno de mis futuros juegos, la influencia de la música es importante.

Ctrl: reiniciar
Z: investigar
A: Para descubrir cuestiones ocultas. (Debe ser removida).
Q: es para saltar de room (debe ser removida por el autor).

Sorprendente, todo se vuelve macabro en un solo click, ahora me siento aterrorizado, el sonido de fondo es  aterrador, suena como bombas militares explotando afuera, como una guerra que está acercándose. Al parecer el juego consiste en descubrir secretos, pero están bien ocultos, me recuerda a OUTSIDE OF THIS WORLD DE SNES, también llamado ANOTHER WORLD, nunca pude pasar ese juego. Por fin entre a una zona de espejos, todo sigue siendo tenebroso. Creo que el juego culmina en la zona de espejos y lueo aparece un sonido bastante aterrador como si nos hemos tele transportado a otra dimensión y el juego se cierra sin errores. Lo jugué como cinco veces para ver si había un final alternativo pero al parecer no. Seria bueno que después del espejo despertara en un sitio bonito y olvidara para siempre lo tenebroso.

Ok, aquí van los consejos:

1. Quitar las funciones de la tecla A y la tecla Q.
2. Indicar que el juego es un juego corto que se puede pasar en un minuto.
3. Indicar que indicar dentro del juego que el jugador tiene que descubir los secretos. La dificultad del juego es alta por eso hay que facilitarle al jugador algunas cosas, según mi parecer el jugador debe disfrutar más que intentar descubrir.
4. Indicar el objetivo del jugador, quizás el objetivo es encontrar el espejo interdimensional. Esto para que el jugador no se pierda y crea que es un juego sin sentido.
5. Dar pistas de los secretos ocultos, quisas: "algunas paredes no son lo que parecen"
6. Indicar que la tecla Z es para investigar.
7. El sonido que se escucha cuando el camino es correcto o incorrecto puede ser mejorado, al principio ni me di cuenta que había un sonido indicador.
8. Es bueno que sea un poco mas largo.
9. Acelerar la velocidad de caminar del sprite.
10. Indicar un mensaje al final del juego que diga lo que ha pasado, quizas: "El joven entró a otra dimensión, fin, ganastes".
11. Agrega fotos a la presentación de tu juego, las fotos pueden decirnos que es lo que vamos a ver. Algunas personas no tendrán la posibilidad de jugarlo, poreso algunas fotos son necesarias para contemplar algunas partes de tu obra de arte.

En cuanto a lo tenebroso, percibo que has jugado juegos tenebrosos y posiblemente te gustan las películas de misterio, mientras jugaba el juego me acordé de SILENT HILL 1 para PlayStation 1. Hay que tener cuidado con los juegos y películas de misterio eso atrae a los espíritus malignos.

Lo que no me ha gustado:

1.   La falta de explicaciones: como programador sé lo difícil que es darle explicaciones al jugador para que pueda ir entendiendo todo poco a poco, pero hay que hacerlo. Hay que guiar al jugador e ir contándole todo lo que está ocurriendo para que no se sienta perdido, porque cuando un jugador se siente perdido simplemente deja de jugar el juego y dice que el juego es malo y se va a jugar otro que lo guie.

Lo que sí me ha gustado:

1.   La programación del mismo: tengo muchos años usando game maker y todavía no sé conseguir el efecto de aparecer las palabras una por una como lo haces en los diálogos. Bueno pensándolo bien yo creo que no es difícil es cuestión de ir asignando una por una la letra a dibujar en un ciclo for que dependa del largo del texto.
2.   El apagado de la luz: Yo no sé oscurecer la room para que parezca todo más oscuro, a menos que cambie todos los sprites por otros más oscuros, supongo que usastes alguna función del game maker studio que hace todo más fácil.
3.   El estilo: estoy aferrado a un estilo de programación personal, por los momentos mis futuros juegos no tendrán ni un solo sonido por cuestión de estilo y otras cosas. El estilo de música que usastes está bien, la primera alegra el alma y la segunda cumple con el objetivo de aterrar, y ese cambio de alegría a terror es impactante.
4.   El espejo, al principio pensé que era un espejo real. Sé que es solo una programación básica pero tenía tiempo que no veía eso,  me ha gustado.
5.   Lo sencillo: tu juego sencillo demuestra que no hacen falta unos gráficos sorprendentes para transmitirle emociones al player, por eso te doy cinco puntos y las gracias.

Estoy a la orden para charlar y compartir información, que te valla bien amigo.


Imagen de Silent Hill de playstation 1


Imagen del juego another world de snes tambien llamado out of this world

234
Hola,

Crea un proyecto nuevo y experimenta con el siguiente código el cual deberás colocarlo en el evento step o paso de un objeto.
1. Primero consigue un sprite vidimensional rectangular con forma de flecha o un vehiculo que esté apuntando a la derecha. debes centrar el origen del sprite presionando el boton center.
2. Luego crea un objetos y le asignas el sprite anterior.
3. Al objeto creado le agregas un evento step y luego le agregas una hoja de código con el siguiente código.
4. creas una room y agregas el objeto creado.
5. play

////botones a usar
b1=keyboard_check(vk_left)
b2=keyboard_check(vk_up)
b3=keyboard_check(vk_right)

direction+=(b1-b3)*10
if(direction>360)direction-=360
if(direction<0)direction+=360

if(b2)
{
x+=cos(direction*pi/180)*5
y-=sin(direction*pi/180)*5
}

image_angle=direction


notas:
no lo uses en un evento draw porque no se va a ver el sprite y tendrás que usar el draw_sprite(sprite,image,x,y)
235
Hola, gusto en saludarle.

Solicitando permisos para agregar información a la solución, quería indicarle que para saber la coordenada de una palabra pudieses utilizar: text_scaner(str,w) el cual es un script indicado en el siguiente post https://www.comunidadgm.org/desarrollo-de-scripts/scripts-pack/
236
Preguntas y respuestas / Re:extencions como funcionan?
Octubre 21, 2019, 09:02:37 PM
Hola,

Bueno, primero tienes que agregar la extension.
El siguiente video explica como importar y utilizar una extencion en game maker studio https://www.youtube.com/watch?v=EhHfNlDofiM
Tambien puedes mirar el tutorial de nuestro camarada jucarave https://www.youtube.com/watch?v=jWcEPC1pgfM para importar extencion en otras versiones

Luego tienes que usar los códigos entregados por el autor:
obj_Hero.x += obj_LeftJoy.normalx

obj_Hero.y += obj_LeftJoy.normaly

obj_Hero.image_angle = obj_RightJoy.normaldir


Las exenciones agregan códigos a game maker, tienes que encontrar el código que dibuja el virtual joystick
237
Preguntas y respuestas / Re:Canciones aleatorias
Octubre 21, 2019, 08:24:13 PM
Hola,

Tu código es muy bueno, y cumple su función pues detecta cuando la música ha terminado y reproduce otra al azar. Ahora bien si lo que quieres es experimentar con la duración de cada musica para crear una alarma pues necesitarías:

audio_sound_length(index): Esta función devolverá la duración del sonido dado en segundos.

Luego tendrías que calcular la alarma correcta con:

alarm[0]=audio_sound_length(index)/fps

Ahora bien, la alarma internamente se evalua por cada paso por segundo para verificar si ha terminado o no por lo tanto no hemos solucionado el problema pues lo que queríamos era ahorrarnos unos códigos por segundo. Se puede concluir que el código que muestras al principio es el más optimo.

El código entregado es experimental porfavor mostrar resultados de su ejecución.
238
Hola, gusto en saludarle.

Podemos cambiar de sprite, tambien podemos cambiar la imagen del sprite, de igual manera podemos girar una imagen y por ultimo podemos escalar una imagen para obtener imagen espejo.

sprite_index: Es el sprite que usará el objeto.
imagen_index: Es la imagen que mostrará del sprite seleccionado. (Para sprites secuenciales con varias imágenes)
image_xscale: Es para escalar una imagen (hacerla grande o pequeña), pero también puedes voltearla como si fuera un espejo (Osea en otra dirección.)
image_angle: Para girar la imagen en un ángulo determinado cuyos valores varían de 0 a 360.

Ahora bien, los que usan game maker viejísimo (como yo que estoy comenzando a usar el 1.1 del año 2000 ), no pueden usar image_xscale ni imagen_angle, todo eso fue implementado en la version 6 del game maker si no e equivoco. Pero pueden obtener el mismo efecto que aparece en el juego mediante otros métodos.

En el juego mostrado vi un arma que gira a 360 grados, que cuando la posición x del mouse se coloca antes de la posicion x del player en tonces ocurre alguna de estas dos alternativas: El arma cambia de sprite o la imagen del sprite hace una escala.  Al parecer la experiencia del programador es buena como para dominar la xscale por lo tanto deduzco que esta usando la image_xscale.(Yo lo haria de esa forma pues me ahorraria un sprite espejo)

¿Como lograr el efecto de las dos formas?

1. Cambiando el sprite del arma
if(mouse_x<object_player.x){sprite_index=sprite_derecha}else{sprite_index=sprite_izquierda}

2.Escalando el arma
if(mouse_x<object_player.x){image_xscale=-1}else{image_xscale=1}

También pudieses crear un solo sprite y no usar xscale y tampoco requerir de un cambio de sprite. ¿como? creando un solo sprite que contenga todas las imagenes con vista a la derecha y las de vista a la izquierda. Y usarias:

image_index=point_direction(object_player.x,object_player.y,mouse_x,mouse_y)

1. Todos los códigos son para el objeto pistola, o para el objeto que la contenga
2. El objeto_plaer es el nombre del objeto player
239
Preguntas y respuestas / Re:Problema con movimiento
Octubre 07, 2019, 11:56:49 PM
Hola, Estoy equivocado, respondí sin pensar y sin analizar.

No usas la keyboard_check_released() para detener el objeto. Pero desactivas el frenado del objeto cuando la global.objeto es igual a uno. Si estoy en lo correcto solo tienes que mover una llave y listo

Antes
if !keyboard_check(vk_left) and !(keyboard_check(vk_right))//SI NO PRESIONO IZQUIERDA NI DERECHA
hspeed=0;
if !keyboard_check(vk_up) and !(keyboard_check(vk_down))//SI NO PRESIONO ARRIBA NI ABAJO
vspeed=0;
}


Despues

}
if !keyboard_check(vk_left) and !(keyboard_check(vk_right))//SI NO PRESIONO IZQUIERDA NI DERECHA
hspeed=0;
if !keyboard_check(vk_up) and !(keyboard_check(vk_down))//SI NO PRESIONO ARRIBA NI ABAJO
vspeed=0;


Si esa es la llave final del if global.objeto=0, entonces tienes que moverla de esa manera.

En cuanto al tiempo que dura el mensaje creo que debes modificar el numero de la variable número por 100

ANTES
if ( numero < 1)
{
numero += 1;

}
else
{
instance_deactivate_object(obj_dialogo);
}


DESPUES
if ( numero < 100)
{
numero += 1;

}
else
{
instance_deactivate_object(obj_dialogo);
}
240
Preguntas y respuestas / Re:Problema con movimiento
Octubre 07, 2019, 11:27:39 PM
Hola,

Tu objeto camina con keyboard_check(),  y se detiene con keyboard_check_released(),  cuando aparece el mensaje todo se paraliza durante un tiempo indicado, la cuestión es que también se paralizan las funciones del keyboard, la función keyboard_check_released no es tomada en cuenta porque todo esta congelado inclusive la detección de teclas.

La solución adaptable a tu código es: frenar el movimiento del objeto antes que aparezca el dialogo colocando vspeed=0 y hspeed=0;