Noticias

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

* Sponsor

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 4 ... 14
16
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 10:15:58 pm »
Hola, saludos.

Para exportar a html5 tienes que hacer lo siguiente:
1.   Cambiar el target a html5.
2.   Crear aplicación, se va a crear una carpeta que contrendrá la versión de tu juego para html5.

Imagen explicativa:

No me lo preguntastes pero, para subir tu juego “html5” a internet para que todo el mundo lo juegue de manera inmediata sin ads en un espacio libre tienes que hacer lo siguiente:
1.   Habre tu google drive.
2.   Crea una carpeta en google drive activándole todos los permisos de usuario. (botón derechom, buscar en propiedades o configuración cualquier cosa que diga permisos y decirle que si a todo)
3.   Pega en esa carpeta la carpeta de tu juego “ya exportado a html5”.
4.   Ve a drv.tw.
5.   Inicia sesión de google en drive.tw
6.   Concedele los permisos
7.   Sigue los pasos
8.   Aparecerá el link de tu juego el cual podrás abrir desde cualquier dispositivo.

Ahora bien, el archivo de tu juego que me enviaste no puede abrir porque solo copiastes un archivo perteneciente a la carpeta de proyectos.
Para poder enviar un proyecto de una persona a otra, tienes que exportar tu proyecto, entrando en file y en exportar proyecto. El archivo resultante si lo podrás compartir.

Advertencias:
No envíes tus proyectos públicamente a menos que no te importe si otro lo toma,  lo modifica y se haga famoso con tu trabajo, gane millones y nadie se entere que fuiste tú que lo creastes, entonces digas algún día : “yo fui el que creó ese juego tan famoso”, pero nadie te crea. Ese es mi caso con Minecraft.
Jajaja no, no es cierto. Pero si intentaba crear algo como minecraft mucho antes que saliera el juego.

17
General / Mensaje de hoy lunes, 24 mayo 2021
« en: Mayo 24, 2021, 07:07:21 pm »
Hola, buenas tardes a todos.
Mensaje de hoy lunes, 24 mayo 2021

Imágenes recomendada:




Versículos recomendados:
Proverbios 18:1 El que vive aislado busca su propio deseo, contra todo consejo se encoleriza.
Eclesiastés 4:9-12 Mejores son dos que uno; porque tienen mejor paga de su trabajo. Porque si cayeren, el uno levantará a su compañero; pero !! ay del solo! que cuando cayere, no habrá segundo que lo levante.

Videos de reflexión recomendados:


Videos alegres y entretenidos:



Bueno, que Dios los bendiga a todos,  los llene de energía y logren ustedes retransmitir alegría por todas partes del mundo.

18
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 02:27:02 am »
Mira el siguiente video y adelantalo a la parte donde exporte a html5, luego me envias el archivo.


19
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 02:03:35 am »
Aunque me lo descargue no creo que pueda, la pc es muy vieja, necesito una pc nueva, jejeje. Nisiquiera puede ejecutar programas de game maker 8.

Pero solo puedo ver juegos exportados a html5.

Si puedes, exporta tu proyecto a html5 y me lo pasas para ver la falla. Aunque exportar a html5 habeces presenta errores, bueno casi siempre. Si quieres lo intentas.


20
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 01:54:43 am »
Creo que no puedo abrirlo, estoy usando game maker html5, no puedo usar studio y solo puedo abrir .gmk y .gmz

21
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 01:32:18 am »
Jajajaja, no te preocupes.

Creo que era más fácil que me pasaras un editable jejejeje., pero no tengo game maker studio disponible, solo tengo una pc vieja que no sé si valla a soportarlo.

Estoy en tu web
https://bird-sick-games.blogspot.com/

22
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 01:18:12 am »
De ser así vamos a desglosar el código hasta que no quede nada de el. Jejeje.
Los datos que tu me has suministrados me indican lo siguiente:
1.   El enemigo se mueve correctamente.
2.   El enemigo sigue al player.
3.   El enemigo no se pega a las paredes.
4.   El enemigo presentó fallas luego de agregarle la función de cambiar sus sprites.
5.   El enemigo presenta la única falla de que no muestra la imagen correcta al seguir al player.
Entonces en base a esos datos que tengo (suministrados por ti y por deducción), puedo concluir que el problema no se halla realmente en el toward point, ni en las máscaras de colición, por tanto nos quedan dos alternativas: Problema en el script o problema con sprites repetidos. El problema con sprites repetidos no creo que sea (a menos que tengas varios sprites repetidos jajajaja,).
Veamos, tienes cuatro sprites:
spr_enemigo_norte;
spr_enemigo_sur;
spr_enemigo_este
spr_enemigo_oeste;

 Bueno, el objetivo es que el enemigo cambie sus sprites dependiendo de donde se encuentre el player, para esto se toma la dirección que tiene el player con respecto al enemigo y se determina la imagen a usar:


Las imágenes por norma general deberán tener el mismo tamaño y el mismo punto central (esto es norma general, no voy a explicar eso. ejeje). Y por ultimo estas imágenes normalmente no requieren tener precisión, por lo tanto hay que desmarcar la casilla de precisión para evitar posibles errores.
Bueno aguimos analizando y nos encontramos con el siguiente script
switch(dir){
    case "abajo":
        sprite_index = spr_enemigo_sur;
        break;
    case "arriba":
        sprite_index = spr_enemigo_norte;
        break;
    case "izquierda":
        sprite_index = spr_enemigo_oeste;
        break;
    case "derecha":
        sprite_index = spr_enemigo_este  
        break;
}

Este script es el responsable de cambiar las imágenes del player y recibe como orden una variable (tipo cadena de texto) llamada dir que hace referencia a la dirección en donde se encuentra el player.
El método empleado puede presentar la siguiente falla:
La falla consiste en que aunque el player está a la derecha, el enemigo sigue mirando hacia abajo porque el player se encuentra dentro del ángulo indicado como “sur.”

Si ese es el caso, repórtalo.
Entonces el código switch anterior, al parecer está tabajando muy bien, según micaso. Pero pueden presentarse fallas si las imágenes son las incorrectas o que el resultado final no sea el que el programador esperaba (caso de la imagen anterior).
Bueno basta de análisis, agrega el siguiente código en un evento draw o dibujo y dime lo que vez:
//Dibujando al player
draw_sprite(sprite_index,image_index,x,y);

//texto
dx=0;
dy=40;
txt="";
ver="txt";

if(ver!="dir"){draw_text(dx,dy,"dir: "+string(dir));dy+=20;if(dy>room_height-20){dy=0;dx+=room_width/2}}

if(ver!="txt"){draw_text(dx,dy,"txt: "+string(txt));dy+=20;if(dy>room_height-20){dy=0;dx+=room_width/2}}
En la pantalla aparecerá la variable dir reflejada y debes indicar si esta cambia correctamente según la posición del player.

23
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 12:38:01 am »
Cuando programé la versión html5 tambien me di cuenta de que las imágenes no cambiaban, es por eso que reemplacé el “else if” por “if” y todo salió bien.

24
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 12:17:31 am »
El siguiente código es tu código original sin modificación:
///propiedades

//avariables
depth = -y;
vv = 0;
vh = 0;
v = 1;

//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
else if (grados >= 45 and grados < 135) dir = "arriba";
else if (grados >= 135 and grados < 225) dir = "izquierda";
else if (grados >= 225 and grados <= 315) dir = "abajo";

Recomiendo que lo modifiques de esta manera:
///propiedades

//avariables
depth = -y;
vv = vspeed;
vh = hspeed;
v = 1;

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
if (grados >= 45 and grados < 135) dir = "arriba";
if (grados >= 135 and grados < 225) dir = "izquierda";
if (grados >= 225 and grados <= 315) dir = "abajo";
Sólo has eso, y si el problema persiste deberás explicar con más detalles el problema, por ejemplo:
1.   El enemigo no muestra las imágenes correctas.
2.   El enemigo se queda pegado a las paredes.
3.   El enemigo no se mueve.
4.   El enemigo no muestra imágenes.
5.   El enemigo no quiere seguir al player.
6.   El enemigo se mueve y luego se queda pegado a las paredes.
7.   El enemigo no se mueve en la dirección correcta.


25
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 23, 2021, 11:56:21 pm »
Bueno, jajaja.
Encontré otros fallos en tu código, en esta zona:
 
//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
else if (grados >= 45 and grados < 135) dir = "arriba";
else if (grados >= 135 and grados < 225) dir = "izquierda";
else if (grados >= 225 and grados <= 315) dir = "abajo";

1.   El primer grupo que se usa para hallar la dirección “//dirección” queda anulado por el segundo grupo de mirar al jugador “//mirar al jugador”. Ya que ambos están buscando establecer el valor de la variable dir pero siempre se tomará el valor que obtenga el conjunto de “//mirar al jugador”. Por lo tanto el primero conjunto no se usa y debe ser borrado.

Borrar esto:
//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

2.   No uses else if, a menos que lo necesites realmente, el “else if” puede ser malinterpretado. Modifica tu código sin usar el else if.

Codigo sin else if
//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
if (grados >= 45 and grados < 135) dir = "arriba";
if (grados >= 135 and grados < 225) dir = "izquierda";
if (grados >= 225 and grados <= 315) dir = "abajo";

Aquí te dejo un html5 que usa parte de tu código y funciona bien


26
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 23, 2021, 11:09:34 pm »
No se preocupe  :-[, más bien me he equivocado yo pero ya creo tener la respuesta.

Ya he comprobado en estos instantes que si existe relación entre las variables: speed, direction, vspeed y hspeed. Lo que significa que para solucionar el problema debes volver al tu código original que se encontraba en el evento step, y solo hacerle la siguiente modificación.

//avariables
depth = -y;
vv = vspeed;
vh = hspeed;
v = 1;

27
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 23, 2021, 10:43:01 pm »
Así como las declarastes en el evento créate, deberás eliminarlas del evento step, pero solo las variables vv y vh.

Si el problema persiste deberás mostrar la otra parte del código de tu enemigo donde se indica el cambio de esas variables.

Aunque es posible que no tengas ese código porque estás esperando que exista una relación automática con el movimiento del player y las variables vv y vh pero eso no sería lo correcto.
En el caso de que quieras relacionar el movimiento del player con las variables vv y vh estas deberían obtener el valor de las variables del sistema vspeed y hspeed respectivamente.

Aunque si el movimiento del enemigo es automático quizás las variables vspeed y hspeed no reflejen movimiento, porque quizás el sistema esté usando solo la variable llamada “speed” y la variable “direction”. De ser hasí deberás establecer la relación entre la velocidad y la dirección para transformarla en valores comprensibles por la vv y vh.

Otro camino más corto sería usar la  “xprevious” y la “yprevious” para indicar la dirección del movimiento.
Tienes que darme más detalles.

28
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 23, 2021, 10:19:10 pm »
Hola, saludos.  ;)

Al parecer hay un problema con las variables vv y vh, tu código necesita que esas variables cambien de valor para determinar la dirección del enemigo, pero nunca cambiarán su valor porque las estás declarando en el evento step y no en el create.

//avariables
depth = -y;
vv = 0;
vh = 0;
v = 1;

29
Nombre del autor : Reyes Dávila.
Breve descripción de su función : Dibuja un cubo 3d, sin activar funciones 3d.
Versión GM utilizada : Game maker 3.3 (April 3, 2001)  y teóricamente funciona en todos los game maker superiores

En el siguiente enlace podrás ver el código funcionando en html5
Draw_cube


Código del script:

Código sin color ni giro para todas las versiones superiores a game maker 3
Spoiler
///draw_cube(x,y,width,height,length,anglex,angley);
//Obteniendo argumentos.
posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument3;
length00=argument4;
anglex00=argument5;
angley00=argument6;

//Determinando los cuatro puntos del cuadrado
//Punto A
pax00=posx00;
pay00=posy00;
//Punto B
pbx00=pax00+length00;
pby00=pay00;
//Punto C
pcx00=pbx00;
pcy00=pby00+height00;
//Punto D
pdx00=pax00;
pdy00=pay00+height00;

//Ubicando el punto de fuga
//Determinando el centro del cubo
pcenx00=pax00+length00/2;
pceny00=pay00+height00/2;
//Punto de fuga
lengthmax00=length00*5;
heightmax00=height00*5;
widthmax00=width00*5;

pfugax00=pcenx00+(lengthmax00/45)*anglex00;
pfugay00=pceny00+(heightmax00/45)*angley00;

if(pfugax00>pcenx00+lengthmax00){pfugax00=pcenx00+lengthmax00}
if(pfugay00>pceny00+heightmax00){pfugay00=pceny00+heightmax00}
if(pfugax00<pcenx00-lengthmax00){pfugax00=pcenx00-lengthmax00}
if(pfugay00<pceny00-heightmax00){pfugay00=pceny00-heightmax00}


//Determinando puntos finales
distancia_ab=point_distance(pax00,pay00,pfugax00,pfugay00);
if(distancia_ab>widthmax00){distancia_ab=widthmax00}
porcentajex02=abs(abs(distancia_ab-widthmax00)*100/widthmax00);
width200=(porcentajex02*width00)/100;
i=width00-width200;
directionf=point_direction(pax00,pay00,pfugax00,pfugay00);
distancia_ab=point_distance(pfugax00,pfugay00,pax00,pay00);
distancia_ab+=0.0000001;
distancia_ax=(distancia_ab-i);
porcentaje100=(distancia_ax*100)/distancia_ab;
length200=(porcentaje100*length00)/100;
x1=pax00+i*cos(directionf*pi/180);
y1=pay00-i*sin(directionf*pi/180);
x2=x1+length200*cos(0*pi/180);
y2=y1-length200*sin(0*pi/180);

pex00=x1;
pey00=y1;
pfx00=x2;
pfy00=y2;


//Determinando puntos finales
distancia_ab=point_distance(pdx00,pdy00,pfugax00,pfugay00);
if(abs(distancia_ab)>widthmax00){distancia_ab=widthmax00}
porcentajex02=abs(abs(distancia_ab-widthmax00)*100/widthmax00);
width200=(porcentajex02*width00)/100;
i=width00-width200;
directionf=point_direction(pdx00,pdy00,pfugax00,pfugay00);
distancia_ab=point_distance(pfugax00,pfugay00,pdx00,pdy00);
distancia_ab+=0.0000001;
distancia_ax=(distancia_ab-i);
porcentaje100=(distancia_ax*100)/distancia_ab;
height200=(porcentaje100*height00)/100;

pgx00=pfx00+height200*cos(270*pi/180);
pgy00=pfy00-height200*sin(270*pi/180);
phx00=pgx00+length200*cos(180*pi/180);
phy00=pgy00-length200*sin(180*pi/180);

//Dibujando líneas
//Línea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Línea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Línea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Línea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);

//Línea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Línea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Línea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Línea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);

//Línea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Línea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Línea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Línea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);


Version 2 del codigo sin color pero con rotación, para todos los game maker superiores a game maker 3.
Spoiler
//draw_cube( x, y, width, height, length, rotation, fugax, fugay);

//Obteniendo argumentos
posx00=argument0;
posy00=argument1;
width00=argument2;
height00=argument3;
length00=argument4;
rotation00=argument5;
pfugax00=argument6;
pfugay00=argument7;

//Determinado punto central de la primera cara
pcenx00=posx00+length00/2;
pceny00=posy00+height00/2;
direction_center00=360-point_direction(posx00,posy00,pcenx00,pceny00);
distance_center00=point_distance(posx00,posy00,pcenx00,pceny00);

//Hallando los primeros cuatro puntos que conforman la primera cara
for(i=1;i<=4;i+=1)
{
direction_ram00=direction_center00;
if(i=2){direction_ram00=180-direction_center00}
if(i=3){direction_ram00=180+direction_center00}
if(i=4){direction_ram00=-direction_center00}
puntox00[i]=pcenx00+distance_center00*cos((direction_ram00+rotation00)*pi/180);
puntoy00[i]=pceny00-distance_center00*sin((direction_ram00+rotation00)*pi/180);
}

//hallando punto de fuga 2
direction_fuga00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
pfuga2x00=pcenx00+width00*2*cos(direction_fuga00*pi/180);
pfuga2y00=pceny00-width00*2*sin(direction_fuga00*pi/180);

//Hallando al punto central 2
direction_fuga00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
pcen2x00=pcenx00+(width00/2)*cos(direction_fuga00*pi/180);
pcen2y00=pceny00-(width00/2)*sin(direction_fuga00*pi/180);

//Hallando al punto central 3
direction_fuga00=point_direction(pcenx00,pceny00,pfuga2x00,pfuga2y00);
pcen3x00=pcenx00+(width00/2)*cos(direction_fuga00*pi/180);
pcen3y00=pceny00-(width00/2)*sin(direction_fuga00*pi/180);

//Ajuste de punto central 2
distance_fuga00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
if(distance_fuga00<width00/2){pcen2x00=pfugax00;pcen2y00=pfugay00}

//Hallando cuatro ultimos puntos
distance_fuga00=point_distance(pcenx00,pceny00,pfuga2x00,pfuga2y00)+0.00001;
distance_fuga200=point_distance(pcen3x00,pcen3y00,pfuga2x00,pfuga2y00)+0.00001;
porcentaje200=distance_fuga200*100/distance_fuga00;
distance_center200=porcentaje200*distance_center00/100;

for(i=5;i<=8;i+=1)
{
direction_ram00=direction_center00;
if(i=6){direction_ram00=180-direction_center00}
if(i=7){direction_ram00=180+direction_center00}
if(i=8){direction_ram00=-direction_center00}
puntox00[i]=pcen2x00+distance_center200*cos((direction_ram00+rotation00)*pi/180);
puntoy00[i]=pcen2y00-distance_center200*sin((direction_ram00+rotation00)*pi/180);
}

//Dibujando lineas cara final
for(i=5;i<=8;i+=1)
{
x1=puntox00[i];
y1=puntoy00[i];
if(i=8){x2=puntox00[5];y2=puntoy00[5]}else{
x2=puntox00[i+1];
y2=puntoy00[i+1];}
draw_line(x1,y1,x2,y2);
}

bloquear=''
//Dibujando lineas de union
for(i=1;i<=4;i+=1)
{
x1=puntox00[i];
y1=puntoy00[i];
x2=puntox00[i+4];
y2=puntoy00[i+4];
draw_line(x1,y1,x2,y2);
}
//'

//Dibujando lineas cara frontal
for(i=1;i<=4;i+=1)
{
x1=puntox00[i];
y1=puntoy00[i];
if(i=4){x2=puntox00[1];y2=puntoy00[1]}else{
x2=puntox00[i+1];
y2=puntoy00[i+1];}
draw_line(x1,y1,x2,y2);
}




bloquear='
//dibujando lineas al punto de fuga
for(i=1;i<=4;i+=1)
{
x1=puntox00[i];
y1=puntoy00[i];
x2=pfuga2x00;
y2=pfuga2y00;
draw_line(x1,y1,x2,y2)
}

draw_line(pcenx00,pceny00,pfugax00,pfugay00);
draw_circle(pcenx00,pceny00,5);
draw_circle(pcen2x00,pcen2y00,5);
//'


Version ligera donde solo se dibujan las lineas del cubo, solo para game maker 4 y 5
Spoiler
///draw_cube( x, y, length, rotation, color_line);
//Ejemplo: draw_cube(x,y,50,direction,c_fuchsia);

posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument2;
length00=argument2;
rotation00=argument3;
color00=argument4;

//Asignando el punto de fuga
pfugax00=xstart+length00*3;
pfugay00=ystart+height00*-3;

//Diagonal
diagonal00=sqrt(power(length00,2)+power(height00,2));

//Punto central
pcenx00=posx00+(diagonal00/2)*cos(315*pi/180);
pceny00=posy00-(diagonal00/2)*sin(315*pi/180);

//Puntos del rectangulo
direction00=rotation00;
distancia00=diagonal00/2;
puntox00=pcenx00;
puntoy00=pceny00;
pax00=puntox00+distancia00*cos((direction00+45)*pi/180);
pay00=puntoy00-distancia00*sin((direction00+45)*pi/180);
pbx00=puntox00+distancia00*cos((direction00+45*3)*pi/180);
pby00=puntoy00-distancia00*sin((direction00+45*3)*pi/180);
pcx00=puntox00+distancia00*cos((direction00+45*5)*pi/180);
pcy00=puntoy00-distancia00*sin((direction00+45*5)*pi/180);
pdx00=puntox00+distancia00*cos((direction00+45*7)*pi/180);
pdy00=puntoy00-distancia00*sin((direction00+45*7)*pi/180);


i=width00;
direction00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
distanciax00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
pcenx200=pcenx00+i*cos(direction00*pi/180);
pceny200=pceny00-i*sin(direction00*pi/180);

distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);
if(distancia100<=i){pcenx200=pfugax00;pceny200=pfugay00}

porcentaje000=i*100/distanciax00;
diagonal000=(diagonal00/2)-porcentaje000*(diagonal00/2)/100;

widthmin=(width00);
if(distancia100<=i){diagonal000=widthmin}
if(diagonal000<widthmin){diagonal000=widthmin}

pex00=pcenx200+diagonal000*cos((rotation00+45)*pi/180);
pey00=pceny200-diagonal000*sin((rotation00+45)*pi/180);
pfx00=pcenx200+diagonal000*cos((rotation00+45*3)*pi/180);
pfy00=pceny200-diagonal000*sin((rotation00+45*3)*pi/180);
pgx00=pcenx200+diagonal000*cos((rotation00+45*5)*pi/180);
pgy00=pceny200-diagonal000*sin((rotation00+45*5)*pi/180);
phx00=pcenx200+diagonal000*cos((rotation00+45*7)*pi/180);
phy00=pceny200-diagonal000*sin((rotation00+45*7)*pi/180);

//dibujando lineas
pen_color=color00;
//draw_set_color(color00)

//Linea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Linea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Linea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Linea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);
//'

//Linea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Linea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//'

//Linea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Linea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//'

version ligera para game maker 6,7,8, html5 y mac
Spoiler
///draw_cube( x, y, length, rotation, color_line);
//Ejemplo: draw_cube(x,y,50,direction,c_fuchsia);

posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument2;
length00=argument2;
rotation00=argument3;
color00=argument4;

//Asignando el punto de fuga
pfugax00=xstart+length00*3;
pfugay00=ystart+height00*-3;

//Diagonal
diagonal00=sqrt(power(length00,2)+power(height00,2));

//Punto central
pcenx00=posx00+(diagonal00/2)*cos(315*pi/180);
pceny00=posy00-(diagonal00/2)*sin(315*pi/180);

//Puntos del rectangulo
direction00=rotation00;
distancia00=diagonal00/2;
puntox00=pcenx00;
puntoy00=pceny00;
pax00=puntox00+distancia00*cos((direction00+45)*pi/180);
pay00=puntoy00-distancia00*sin((direction00+45)*pi/180);
pbx00=puntox00+distancia00*cos((direction00+45*3)*pi/180);
pby00=puntoy00-distancia00*sin((direction00+45*3)*pi/180);
pcx00=puntox00+distancia00*cos((direction00+45*5)*pi/180);
pcy00=puntoy00-distancia00*sin((direction00+45*5)*pi/180);
pdx00=puntox00+distancia00*cos((direction00+45*7)*pi/180);
pdy00=puntoy00-distancia00*sin((direction00+45*7)*pi/180);


i=width00;
direction00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
distanciax00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
pcenx200=pcenx00+i*cos(direction00*pi/180);
pceny200=pceny00-i*sin(direction00*pi/180);

distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);
if(distancia100<=i){pcenx200=pfugax00;pceny200=pfugay00}

porcentaje000=i*100/distanciax00;
diagonal000=(diagonal00/2)-porcentaje000*(diagonal00/2)/100;

widthmin=(width00);
if(distancia100<=i){diagonal000=widthmin}
if(diagonal000<widthmin){diagonal000=widthmin}

pex00=pcenx200+diagonal000*cos((rotation00+45)*pi/180);
pey00=pceny200-diagonal000*sin((rotation00+45)*pi/180);
pfx00=pcenx200+diagonal000*cos((rotation00+45*3)*pi/180);
pfy00=pceny200-diagonal000*sin((rotation00+45*3)*pi/180);
pgx00=pcenx200+diagonal000*cos((rotation00+45*5)*pi/180);
pgy00=pceny200-diagonal000*sin((rotation00+45*5)*pi/180);
phx00=pcenx200+diagonal000*cos((rotation00+45*7)*pi/180);
phy00=pceny200-diagonal000*sin((rotation00+45*7)*pi/180);

//dibujando lineas
pen_color=color00;
draw_set_color(color00)

//Linea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Linea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Linea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Linea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);
//'

//Linea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Linea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//'

//Linea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Linea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//'

Version ligera para game maker studio 1 y 2
Spoiler
///draw_cube( x, y, length, rotation, color_line);
//Ejemplo: draw_cube(x,y,50,direction,c_fuchsia);

posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument2;
length00=argument2;
rotation00=argument3;
color00=argument4;

//Asignando el punto de fuga
pfugax00=xstart+length00*3;
pfugay00=ystart+height00*-3;

//Diagonal
diagonal00=sqrt(power(length00,2)+power(height00,2));

//Punto central
pcenx00=posx00+(diagonal00/2)*cos(315*pi/180);
pceny00=posy00-(diagonal00/2)*sin(315*pi/180);

//Puntos del rectangulo
direction00=rotation00;
distancia00=diagonal00/2;
puntox00=pcenx00;
puntoy00=pceny00;
pax00=puntox00+distancia00*cos((direction00+45)*pi/180);
pay00=puntoy00-distancia00*sin((direction00+45)*pi/180);
pbx00=puntox00+distancia00*cos((direction00+45*3)*pi/180);
pby00=puntoy00-distancia00*sin((direction00+45*3)*pi/180);
pcx00=puntox00+distancia00*cos((direction00+45*5)*pi/180);
pcy00=puntoy00-distancia00*sin((direction00+45*5)*pi/180);
pdx00=puntox00+distancia00*cos((direction00+45*7)*pi/180);
pdy00=puntoy00-distancia00*sin((direction00+45*7)*pi/180);


i=width00;
direction00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
distanciax00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
pcenx200=pcenx00+i*cos(direction00*pi/180);
pceny200=pceny00-i*sin(direction00*pi/180);

distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);
if(distancia100<=i){pcenx200=pfugax00;pceny200=pfugay00}

porcentaje000=i*100/distanciax00;
diagonal000=(diagonal00/2)-porcentaje000*(diagonal00/2)/100;

widthmin=(width00);
if(distancia100<=i){diagonal000=widthmin}
if(diagonal000<widthmin){diagonal000=widthmin}

pex00=pcenx200+diagonal000*cos((rotation00+45)*pi/180);
pey00=pceny200-diagonal000*sin((rotation00+45)*pi/180);
pfx00=pcenx200+diagonal000*cos((rotation00+45*3)*pi/180);
pfy00=pceny200-diagonal000*sin((rotation00+45*3)*pi/180);
pgx00=pcenx200+diagonal000*cos((rotation00+45*5)*pi/180);
pgy00=pceny200-diagonal000*sin((rotation00+45*5)*pi/180);
phx00=pcenx200+diagonal000*cos((rotation00+45*7)*pi/180);
phy00=pceny200-diagonal000*sin((rotation00+45*7)*pi/180);

//dibujando lineas
pen_color=color00;
draw_set_colour(color00)

//Linea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Linea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Linea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Linea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);
//'

//Linea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Linea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//'

//Linea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Linea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//'

Código con color y giro para game maker 4 y 5
Spoiler
///draw_cube( x, y, length, fugax, fugay, rotation);
//Ejemplo: draw_cube(x,y,50,256,256,direction,c_fuchsia);

posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument2;
length00=argument2;
pfugax00=argument3;
pfugay00=argument4;
rotation00=argument5;
color00=argument6;

c100=(color00=c_fuchsia);
c200=(color00=c_ltgray);
c300=(color00=c_purple);
c400=(color00=c_red);
c500=(color00=c_white);
c600=(color00=c_yellow);

if(!(c100 || c200 || c300 || c400 || c500 || c600))
{
color00+=25;
}

//c_aqua
//c_black
//c_blue
//c_dkgray
//c_fuchsia no+25
//c_gray
//c_green
//c_lime
//c_ltgray no+25
//c_maroon
//c_navy
//c_olive
//c_purple no+25
//c_red no+25
//c_silver
//c_teal
//c_white no+25
//c_yellow no+25


color01=color00-5;
color02=color00-5*2;
color03=color00-5*3;
color04=color00-5*4;
color05=color00-5*5;

//Diagonal
diagonal00=sqrt(power(length00,2)+power(height00,2));

//Punto central
pcenx00=posx00+(diagonal00/2)*cos(315*pi/180);
pceny00=posy00-(diagonal00/2)*sin(315*pi/180);

//Puntos del rectangulo
direction00=rotation00;
distancia00=diagonal00/2;
puntox00=pcenx00;
puntoy00=pceny00;
pax00=puntox00+distancia00*cos((direction00+45)*pi/180);
pay00=puntoy00-distancia00*sin((direction00+45)*pi/180);
pbx00=puntox00+distancia00*cos((direction00+45*3)*pi/180);
pby00=puntoy00-distancia00*sin((direction00+45*3)*pi/180);
pcx00=puntox00+distancia00*cos((direction00+45*5)*pi/180);
pcy00=puntoy00-distancia00*sin((direction00+45*5)*pi/180);
pdx00=puntox00+distancia00*cos((direction00+45*7)*pi/180);
pdy00=puntoy00-distancia00*sin((direction00+45*7)*pi/180);


i=width00;
direction00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
distanciax00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
pcenx200=pcenx00+i*cos(direction00*pi/180);
pceny200=pceny00-i*sin(direction00*pi/180);

distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);
if(distancia100<=i){pcenx200=pfugax00;pceny200=pfugay00}

porcentaje000=i*100/distanciax00;
diagonal000=(diagonal00/2)-porcentaje000*(diagonal00/2)/100;

widthmin=(width00);
if(distancia100<=i){diagonal000=widthmin}
if(diagonal000<widthmin){diagonal000=widthmin}

pex00=pcenx200+diagonal000*cos((rotation00+45)*pi/180);
pey00=pceny200-diagonal000*sin((rotation00+45)*pi/180);
pfx00=pcenx200+diagonal000*cos((rotation00+45*3)*pi/180);
pfy00=pceny200-diagonal000*sin((rotation00+45*3)*pi/180);
pgx00=pcenx200+diagonal000*cos((rotation00+45*5)*pi/180);
pgy00=pceny200-diagonal000*sin((rotation00+45*5)*pi/180);
phx00=pcenx200+diagonal000*cos((rotation00+45*7)*pi/180);
phy00=pceny200-diagonal000*sin((rotation00+45*7)*pi/180);

//distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);

//dibujando triangulos
pen_color=c_black;
pen_color=brush_color;
//Cara 6
brush_color=color05;
pen_color=brush_color;
draw_triangle(phx00,phy00,pgx00,pgy00,pfx00,pfy00);
draw_triangle(phx00,phy00,pex00,pey00,pfx00,pfy00);
//Cara 5
brush_color=color04;
pen_color=brush_color;
draw_triangle(pax00,pay00,pex00,pey00,phx00,phy00);
draw_triangle(pax00,pay00,pdx00,pdy00,phx00,phy00);
//Cara 4
brush_color=color03;
pen_color=brush_color;
draw_triangle(pcx00,pcy00,pgx00,pgy00,phx00,phy00);
draw_triangle(pcx00,pcy00,pdx00,pdy00,phx00,phy00);
//Cara 3
brush_color=color02;
pen_color=brush_color;
draw_triangle(pbx00,pby00,pfx00,pfy00,pgx00,pgy00);
draw_triangle(pbx00,pby00,pcx00,pcy00,pgx00,pgy00);
//Cara 2
brush_color=color01;
pen_color=brush_color;
draw_triangle(pax00,pay00,pex00,pey00,pfx00,pfy00);
draw_triangle(pax00,pay00,pbx00,pby00,pfx00,pfy00);
//Cara 1
brush_color=color00;
pen_color=brush_color;
draw_triangle(pax00,pay00,pbx00,pby00,pcx00,pcy00);
draw_triangle(pax00,pay00,pdx00,pdy00,pcx00,pcy00);

pen_color=c_black;
//dibujando lineas
//Linea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Linea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Linea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Linea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);

//Linea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Linea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);

//Linea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Linea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);

Código con giro y color para game maker 6, 7, 8, html5 y mac.
Spoiler
///draw_cube( x, y, length, fugax, fugay, rotation);
//Ejemplo: draw_cube(x,y,50,256,256,direction,c_fuchsia);

posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument2;
length00=argument2;
pfugax00=argument3;
pfugay00=argument4;
rotation00=argument5;
color00=argument6;

c100=(color00=c_fuchsia);
c200=(color00=c_ltgray);
c300=(color00=c_purple);
c400=(color00=c_red);
c500=(color00=c_white);
c600=(color00=c_yellow);

if(!(c100 || c200 || c300 || c400 || c500 || c600))
{
color00+=25;
}

//c_aqua
//c_black
//c_blue
//c_dkgray
//c_fuchsia no+25
//c_gray
//c_green
//c_lime
//c_ltgray no+25
//c_maroon
//c_navy
//c_olive
//c_purple no+25
//c_red no+25
//c_silver
//c_teal
//c_white no+25
//c_yellow no+25


color01=color00-5;
color02=color00-5*2;
color03=color00-5*3;
color04=color00-5*4;
color05=color00-5*5;

//Diagonal
diagonal00=sqrt(power(length00,2)+power(height00,2));

//Punto central
pcenx00=posx00+(diagonal00/2)*cos(315*pi/180);
pceny00=posy00-(diagonal00/2)*sin(315*pi/180);

//Puntos del rectangulo
direction00=rotation00;
distancia00=diagonal00/2;
puntox00=pcenx00;
puntoy00=pceny00;
pax00=puntox00+distancia00*cos((direction00+45)*pi/180);
pay00=puntoy00-distancia00*sin((direction00+45)*pi/180);
pbx00=puntox00+distancia00*cos((direction00+45*3)*pi/180);
pby00=puntoy00-distancia00*sin((direction00+45*3)*pi/180);
pcx00=puntox00+distancia00*cos((direction00+45*5)*pi/180);
pcy00=puntoy00-distancia00*sin((direction00+45*5)*pi/180);
pdx00=puntox00+distancia00*cos((direction00+45*7)*pi/180);
pdy00=puntoy00-distancia00*sin((direction00+45*7)*pi/180);


i=width00;
direction00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
distanciax00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
pcenx200=pcenx00+i*cos(direction00*pi/180);
pceny200=pceny00-i*sin(direction00*pi/180);

distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);
if(distancia100<=i){pcenx200=pfugax00;pceny200=pfugay00}

porcentaje000=i*100/distanciax00;
diagonal000=(diagonal00/2)-porcentaje000*(diagonal00/2)/100;

widthmin=(width00);
if(distancia100<=i){diagonal000=widthmin}
if(diagonal000<widthmin){diagonal000=widthmin}

pex00=pcenx200+diagonal000*cos((rotation00+45)*pi/180);
pey00=pceny200-diagonal000*sin((rotation00+45)*pi/180);
pfx00=pcenx200+diagonal000*cos((rotation00+45*3)*pi/180);
pfy00=pceny200-diagonal000*sin((rotation00+45*3)*pi/180);
pgx00=pcenx200+diagonal000*cos((rotation00+45*5)*pi/180);
pgy00=pceny200-diagonal000*sin((rotation00+45*5)*pi/180);
phx00=pcenx200+diagonal000*cos((rotation00+45*7)*pi/180);
phy00=pceny200-diagonal000*sin((rotation00+45*7)*pi/180);

//distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);

//dibujando triangulos
pen_color=c_black;
//Cara 6
brush_color=color05;
pen_color=brush_color;
draw_set_color(pen_color);
draw_triangle(phx00,phy00,pgx00,pgy00,pfx00,pfy00,0);
draw_triangle(phx00,phy00,pex00,pey00,pfx00,pfy00,0);
//Cara 5
brush_color=color04;
pen_color=brush_color;
draw_set_color(pen_color);
draw_triangle(pax00,pay00,pex00,pey00,phx00,phy00,0);
draw_triangle(pax00,pay00,pdx00,pdy00,phx00,phy00,0);
//Cara 4
brush_color=color03;
pen_color=brush_color;
draw_set_color(pen_color);
draw_triangle(pcx00,pcy00,pgx00,pgy00,phx00,phy00,0);
draw_triangle(pcx00,pcy00,pdx00,pdy00,phx00,phy00,0);
//Cara 3
brush_color=color02;
pen_color=brush_color;
draw_set_color(pen_color);
draw_triangle(pbx00,pby00,pfx00,pfy00,pgx00,pgy00,0);
draw_triangle(pbx00,pby00,pcx00,pcy00,pgx00,pgy00,0);
//Cara 2
brush_color=color01;
pen_color=brush_color;
draw_set_color(pen_color);
draw_triangle(pax00,pay00,pex00,pey00,pfx00,pfy00,0);
draw_triangle(pax00,pay00,pbx00,pby00,pfx00,pfy00,0);
//Cara 1
brush_color=color00;
pen_color=brush_color;
draw_set_color(pen_color);
draw_triangle(pax00,pay00,pbx00,pby00,pcx00,pcy00,0);
draw_triangle(pax00,pay00,pdx00,pdy00,pcx00,pcy00,0);

pen_color=c_black;
draw_set_color(pen_color);

//dibujando lineas
//Linea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Linea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Linea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Linea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);

//Linea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Linea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);

//Linea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Linea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);

Código con giro y color para game maker studio 1 y 2.
Spoiler
///draw_cube( x, y, length, fugax, fugay, rotation);
//Ejemplo: draw_cube(mouse_x,mouse_y,50,room_width/2,room_height/2,direction,c_fuchsia);


posx00=argument0;
posy00=argument1;
width00=argument2/2;
height00=argument2;
length00=argument2;
pfugax00=argument3;
pfugay00=argument4;
rotation00=argument5;
color00=argument6;

c100=(color00=c_fuchsia);
c200=(color00=c_ltgray);
c300=(color00=c_purple);
c400=(color00=c_red);
c500=(color00=c_white);
c600=(color00=c_yellow);

if(!(c100 || c200 || c300 || c400 || c500 || c600))
{
color00+=25;
}

//c_aqua
//c_black
//c_blue
//c_dkgray
//c_fuchsia no+25
//c_gray
//c_green
//c_lime
//c_ltgray no+25
//c_maroon
//c_navy
//c_olive
//c_purple no+25
//c_red no+25
//c_silver
//c_teal
//c_white no+25
//c_yellow no+25


color01=color00-5;
color02=color00-5*2;
color03=color00-5*3;
color04=color00-5*4;
color05=color00-5*5;

//Diagonal
diagonal00=sqrt(power(length00,2)+power(height00,2));

//Punto central
pcenx00=posx00+(diagonal00/2)*cos(315*pi/180);
pceny00=posy00-(diagonal00/2)*sin(315*pi/180);

//Puntos del rectangulo
direction00=rotation00;
distancia00=diagonal00/2;
puntox00=pcenx00;
puntoy00=pceny00;
pax00=puntox00+distancia00*cos((direction00+45)*pi/180);
pay00=puntoy00-distancia00*sin((direction00+45)*pi/180);
pbx00=puntox00+distancia00*cos((direction00+45*3)*pi/180);
pby00=puntoy00-distancia00*sin((direction00+45*3)*pi/180);
pcx00=puntox00+distancia00*cos((direction00+45*5)*pi/180);
pcy00=puntoy00-distancia00*sin((direction00+45*5)*pi/180);
pdx00=puntox00+distancia00*cos((direction00+45*7)*pi/180);
pdy00=puntoy00-distancia00*sin((direction00+45*7)*pi/180);


i=width00;
direction00=point_direction(pcenx00,pceny00,pfugax00,pfugay00);
distanciax00=point_distance(pcenx00,pceny00,pfugax00,pfugay00)+0.00001;
pcenx200=pcenx00+i*cos(direction00*pi/180);
pceny200=pceny00-i*sin(direction00*pi/180);

distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);
if(distancia100<=i){pcenx200=pfugax00;pceny200=pfugay00}

porcentaje000=i*100/distanciax00;
diagonal000=(diagonal00/2)-porcentaje000*(diagonal00/2)/100;

widthmin=(width00);
if(distancia100<=i){diagonal000=widthmin}
if(diagonal000<widthmin){diagonal000=widthmin}

pex00=pcenx200+diagonal000*cos((rotation00+45)*pi/180);
pey00=pceny200-diagonal000*sin((rotation00+45)*pi/180);
pfx00=pcenx200+diagonal000*cos((rotation00+45*3)*pi/180);
pfy00=pceny200-diagonal000*sin((rotation00+45*3)*pi/180);
pgx00=pcenx200+diagonal000*cos((rotation00+45*5)*pi/180);
pgy00=pceny200-diagonal000*sin((rotation00+45*5)*pi/180);
phx00=pcenx200+diagonal000*cos((rotation00+45*7)*pi/180);
phy00=pceny200-diagonal000*sin((rotation00+45*7)*pi/180);

//distancia100=point_distance(pcenx00,pceny00,pfugax00,pfugay00);

//dibujando triangulos
//Cara 6
brush_color=color05;
pen_color=brush_color;
//draw_set_color(pen_color);
draw_set_colour(pen_color);
draw_triangle(phx00,phy00,pgx00,pgy00,pfx00,pfy00);
draw_triangle(phx00,phy00,pex00,pey00,pfx00,pfy00);
//Cara 5
brush_color=color04;
pen_color=brush_color;
//draw_set_color(pen_color);
draw_set_colour(pen_color);
draw_triangle(pax00,pay00,pex00,pey00,phx00,phy00);
draw_triangle(pax00,pay00,pdx00,pdy00,phx00,phy00);
//Cara 4
brush_color=color03;
pen_color=brush_color;
//draw_set_color(pen_color);
draw_set_colour(pen_color);
draw_triangle(pcx00,pcy00,pgx00,pgy00,phx00,phy00);
draw_triangle(pcx00,pcy00,pdx00,pdy00,phx00,phy00);
//Cara 3
brush_color=color02;
pen_color=brush_color;
//draw_set_color(pen_color);
draw_set_colour(pen_color);
draw_triangle(pbx00,pby00,pfx00,pfy00,pgx00,pgy00);
draw_triangle(pbx00,pby00,pcx00,pcy00,pgx00,pgy00);
//Cara 2
brush_color=color01;
pen_color=brush_color;
//draw_set_color(pen_color);
draw_set_colour(pen_color);
draw_triangle(pax00,pay00,pex00,pey00,pfx00,pfy00);
draw_triangle(pax00,pay00,pbx00,pby00,pfx00,pfy00);
//Cara 1
brush_color=color00;
pen_color=brush_color;
//draw_set_color(pen_color);
draw_set_colour(pen_color);
draw_triangle(pax00,pay00,pbx00,pby00,pcx00,pcy00);
draw_triangle(pax00,pay00,pdx00,pdy00,pcx00,pcy00);

pen_color=c_black;
//draw_set_color(pen_color);
draw_set_colour(pen_color);

//dibujando lineas
//Linea A-B
x1=pax00;y1=pay00;x2=pbx00;y2=pby00;
draw_line(x1,y1,x2,y2);
//Linea B-C
x1=pbx00;y1=pby00;x2=pcx00;y2=pcy00;
draw_line(x1,y1,x2,y2);
//Linea C-D
x1=pcx00;y1=pcy00;x2=pdx00;y2=pdy00;
draw_line(x1,y1,x2,y2);
//Linea D-A
x1=pdx00;y1=pdy00;x2=pax00;y2=pay00;
draw_line(x1,y1,x2,y2);

//Linea E-F
x1=pex00;y1=pey00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea F-G
x1=pfx00;y1=pfy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea G-H
x1=pgx00;y1=pgy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
//Linea H-E
x1=phx00;y1=phy00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);

//Linea A-E
x1=pax00;y1=pay00;x2=pex00;y2=pey00;
draw_line(x1,y1,x2,y2);
//Linea B-F
x1=pbx00;y1=pby00;x2=pfx00;y2=pfy00;
draw_line(x1,y1,x2,y2);
//Linea C-G
x1=pcx00;y1=pcy00;x2=pgx00;y2=pgy00;
draw_line(x1,y1,x2,y2);
//Linea D-H
x1=pdx00;y1=pdy00;x2=phx00;y2=phy00;
draw_line(x1,y1,x2,y2);
Modo de uso:
1. Copia el código.
2. Crea un nuevo script, pegas el código y colocale de nombre draw_cube.
3. En un evento draw de un objeto cualquiera coloca el siguiente código y modifícalo a tu gusto:
draw_cube(256,256,64,64,64,45,45);

Detalles de la función draw_cube
draw_cube( x, y, width, height, length, anglex, angley):
X y Y: Posición de la esquina superior izquierda del cubo, es la ubicación del cubo en la room.
Width, height y length: Coloca en estos el ancho, la altura y el largo respectivamente, guiándote por el siguiente dibujo.
Anglex y angley: son los ángulos de inclinación del cubo los cuales no deben ser menores de -45 ni mayores a 45 grados.
fugax y fugay: Es la posición del punto de fuga en el plano. (Estudiar proyección cónica).
Imagen1:


Imagen 2:


Vista previa:


Limitaciones:
1. El cubo no podrá girar 360 grados, tiene un límite de giro de 45 grados.
2. El cubo no puede adquirir textura ni color de fondo.

Importancia:
Este script contiene los fundamentos básicos de proyección cónica con un punto de fuga (estudiar sobre proyección cónica) y servirá de base para la creación de otros scripts con dos o más puntos de fugas, lo que puede permitir la formación de objetos 3d más exactos y complejos sin necesidad de emplear funciones 3d.

Orígen:
Desde hace algunos años tengo la intención de crear algún juego 3d en game makers que no empleen 3d y luego de investigar encontré el tema de proyecciones cónicas suministrado por un canal de youtube llamado .

Mejoras en proceso:
1. Giro de 360 grados.
2. Funcion para agregar color de fondo.
3. Rotación desde su punto central: lo que se quiere es que el cubo pueda girar sobre su punto central.

Dificultades de programación:
Quiero mejorar el script agregándole la posibilidad de girar el cubo a 360 grados y no encuentro tutorial de proyección cónica que explique eso, sólo encontré un tutorial de entivoo ()que indica que para lograr un giro completo es necesario pasar de “dos puntos de fuga” a “un punto de fuga” (proyecciones cónicas) pero no me explica cómo, para lograr eso es necesario comprender al 100% la transición que existe entre dos puntos de fuga a un punto de fuga.
Intenté crear un script que involucra dos puntos de fuga pero me resultó bastante malo, en el proceso logré echarle un vistazo a lo que me espera y ahora sé que para abordar ese tema será bueno mejorar el presente script (de un punto de fuga) agregándole más funciones complejas y útiles que permita un giro en 2D y agregar colores mediante triángulos.

Visión a futuro:
Bueno…, sin esperanza no hay programación. Más adelante si Dios lo permite y si recibo ayuda intelectual y quizás económica, pienso crear un script más complejo que permita la formación de figuras 3d a base de triángulos en el espacio, lo que me permitirá crear una versión de starfox de snes. Ya sé que game  maker cuenta con un avanzado sistema 3d que lo facilita todo, pero tomaré el camino difícil para encontrar en el proceso otros códigos más complejos que jamás pudiese haber imaginado.

Imágenes:
Bueno, estos son algunos juegos que quiero aprender a programar desde cero empleando proyección cónica, los cuales me mantienen motivado para seguir con este tema tan fantástico:

Clásico laberinto de Windows 95


Top Gear snes


Mario Kart Snes

Star fox snes



Cubo a cubo lograremos el objetivo



Nos vemos.



30
Preguntas y respuestas / Re: Fuentes Borrosas
« en: Mayo 18, 2021, 08:22:28 pm »
Hola, saludos a todos.

A mí pe pasó algo como eso en game maker studio al exportar a html5, aún no he encontrado la solución ideal, pero hice varios experimentos e inclusive traté de crear mi propia fuente. Estos son algunos de mis hallazgos:

1.   Los píxeles de distorcionan cuando la view o room es menor a 256x256.
2.   Al parecer game maker hace una escala automática cuando se exporta en algunas plataformas lo que hace que desaparezcan algunos píxeles.
3.   El problema persiste solo al esportar en html5 y no present problemas al exportar a Windows.
4.   Esto afecta a imágenes y textos, pero gravemente a textos.
5.   Hay que experimentar con texto grueso, oscurecido con la función “negrita”, Quizás se corrija un poco la falla.
6.   Las imágenes lograron corregirse al ser aumentadas al doble es decir que si median 256x256 ahora miden 512x512, lo que cada pixel está representado con 4 píxeles, esto evitará que todos los pixeles sean borrados.



Páginas: 1 2 3 4 ... 14