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

91
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
[gml]
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;
}

[/gml]
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:
[gml]
//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}}
[/gml]
En la pantalla aparecerá la variable dir reflejada y debes indicar si esta cambia correctamente según la posición del player.
92
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.
93
El siguiente código es tu código original sin modificación:
[gml]
///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";
[/gml]

Recomiendo que lo modifiques de esta manera:
[gml]
///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";
[/gml]
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.

94
Bueno, jajaja.
Encontré otros fallos en tu código, en esta zona:
[gml]
//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";

[/gml]
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:
[gml]
//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";
[/gml]

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
[gml]
//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";
[/gml]

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

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

[gml]
//avariables
depth = -y;
vv = vspeed;
vh = hspeed;
v = 1;
[/gml]
96
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.
97
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.

[gml]
//avariables
depth = -y;
vv = 0;
vh = 0;
v = 1;
[/gml]
98
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][gml]
///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);

[/gml]
[/spoiler]

Version 2 del codigo sin color pero con rotación, para todos los game maker superiores a game maker 3.
[spoiler]
[gml]
//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=pcenx00+distance_center00*cos((direction_ram00+rotation00)*pi/180);
puntoy00=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=pcen2x00+distance_center200*cos((direction_ram00+rotation00)*pi/180);
puntoy00=pcen2y00-distance_center200*sin((direction_ram00+rotation00)*pi/180);
}

//Dibujando lineas cara final
for(i=5;i<=8;i+=1)
{
x1=puntox00;
y1=puntoy00;
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;
y1=puntoy00;
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;
y1=puntoy00;
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;
y1=puntoy00;
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);
//'
[/gml]

[/spoiler]

Version ligera donde solo se dibujan las lineas del cubo, solo para game maker 4 y 5
[spoiler][gml]///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);
//'
[/gml][/spoiler]

version ligera para game maker 6,7,8, html5 y mac
[spoiler][gml]///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);
//'
[/gml][/spoiler]

Version ligera para game maker studio 1 y 2
[spoiler][gml]///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);
//'
[/gml][/spoiler]

Código con color y giro para game maker 4 y 5
[spoiler][gml]///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);
[/gml]
[/spoiler]

Código con giro y color para game maker 6, 7, 8, html5 y mac.
[spoiler][gml]///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);
[/gml][/spoiler]

Código con giro y color para game maker studio 1 y 2.
[spoiler][gml]///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);
[/gml][/spoiler]
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 entivoo.

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 (este tutorial)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.


99
Preguntas y respuestas / Re: Fuentes Borrosas
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.


100
Hola, gusto en saludarlo.

Aquí dos programas html5 con la respuesta, uno para pc y uno para móvil, los cuales pueden abrir dándole click a la imagen:




Versión móvil:Versión PC:

Explicación:

Bueno lo primero que vamos a hacer es definir variables para identificar a cada uno de los factores que intervienen en el proyecto:

1.   global.energia: será la variable que indicará la energía del personaje, si la energía ha llegado al 100% entonces estará completa y si es cero es porque no tiene energía.
2.   estado: en esta variable es la que nos va a indicar el estado del personaje, entre los estados posibles son: parado, caminando y corriendo.
3.   tecla_correr: es la variable que nos va a indicar cuál es la tecla que vamos a usar para correr.
4.   sprite_barra: Es el nombre que tendrá el sprite que se utilizará para representar la barra de energía.
5.   ancho_barra: En esta variable debemos colocar el ancho en pixeles que mide el sprite que usaremos para crear la barra, en este caso usaremos un sprite rectangular con dos imágenes una roja que servirá de fondo y una azul que hará referencia al porcentaje de energía.
6.   margen: es el margen o separación que tendrá la barra de las orillas de la room, o las orillas de la view, es decir la cámara que sigue al player.
7.   room_width: Es la variable que nos indicará el ancho de la room.
8.   ancho_pantalla:  Es la variable que nos indicara el ancho real de la pantalla y puede ser el ancho de la room o el ancho de la view si estas usando una cámara que sigue al player.

Ahora vamos a declarar esas variables en un evento créate del objeto player:

[gml]
//porcentaje de energía
global.energia=100;

//Estado del personaje:
//Los estados en este caso son: parado, caminando, corriendo.
global.estado="parado";

//tecla que se va a usar para correr
tecla_correr=ord("X");//En este caso se esta indicando que la tecla para correr es la X

//ancho de barra de energía
ancho_barra=300;

//margen de separación de la barra:
margen=10;
[/gml]


A continuación nos vamos al evento draw del player y colocamos los siguientes códigos:

1.   Definimos una variable que se encargará de evaluar si la tecla para correr está presionada.
[gml]
//botones a reconocer
tecla_correr_presionada=(keyboard_check(tecla_correr));
[/gml]

2.   Indicamos las reglas o condiciones que indicarán cuando la barra de energía bajará o se recargará:
[gml]
//Para controlar la energía
//restando energía cuando corre
if(global.estado="corriendo"){global.energia-=0.5;}
//subiendo energia cuando está parado
if(global.estado="parado"){global.energia+=0.5;}
[/gml]

3.   Establecemos un regulador de la energia para que no suba de 100 ni baje de 0%.
[gml]
//regulador de energia
if(global.energia<0){global.energia=0}//para que la energia no baje de cero;
if(global.energia>100){global.energia=100}//para que la energia no suba de 100;

[/gml]

4.   Creamos las condiciones para los estados, estas condiciones se utilizaran de manera combinada para determinar el estado del player
[gml]
//Determinando los estados
condicion1=(x=xprevious);//será verdadero si no se está moviendo
condicion2=tecla_correr_presionada;//será verdadero si se presiona la tecla de correr
condicion3=(global.energia>0);//si la energia es mayor que cero
[/gml]

5.   Ahora definimos la relación entre las condiciones y el estado del player:
[gml]
//Parado
if(condicion1){global.estado="parado"}
//caminando
if(!condicion1){global.estado="caminando"}
//corriendo
if(!condicion1 && condicion2 && condicion3){global.estado="corriendo"}
[/gml]

6.   Por último mandamos a dibujar la barra de energía:
[gml]
//Dibujando barra de energia
ancho_pantalla=room_width;//determinando el ancho de pantalla o ancho de room
//ancho_pantalla=view_xport[0]+view_wport[0];
posicion_barra_x=ancho_pantalla-ancho_barra-margen;
//barra roja de fondo
draw_sprite(sprite_barra,0,posicion_barra_x,margen);
//barra azul indicativa de energia.
draw_sprite_stretched(sprite_barra,1,posicion_barra_x,margen,global.energia/100*ancho_barra,128);
[/gml]

Si estas usando una view, o una cámara que sigue al player tendrás que cambiar la variable ancho _pantalla de la siguiente manera:

[gml]
ancho_pantalla=view_xport[0]+view_wport[0];
[/gml]

Bueno eso es todo, nos vemos.
   

101
Hola, gusto en saludarlos.

Pido disculpas por haber creado un post carente de seriedad, resultando molesto y sin sentido, ahora presento la respuesta de manera más clara sin acortadores de url.
En el siguiente está un html5 con la respuesta funcionando, antes estaba acortado pero ya está libre.
Click en la imagen

Bueno, la solución planteada:
El problema del código es que ya está creando un objeto en el punto exacto de colisión y por lo tanto el objetivo no es crearlo en ese punto, el objetivo es que mantenga su órbita según ese punto de creación. Para ello hay que restarle al ángulo (image_angle) de la gran esfera el ángulo que se forma cuando se crea la instancia. Para ello aremos los siguiente:
1.   Agregamos este código al evento créate del o_player_2.
[gml]
//Evento créate del o_player_2
var id_1 = instance_nearest(x,y,o_ball_rot2);
var direction_factor=point_direction(id_1.x,id_1.y,x,y); direction_factor=id_1.image_angle-direction_factor;
[/gml]

Ya tenemos la direction_factor, que va a ser el ángulo que se obtiene al colisionar, o mejor dicho al crear al o_player_2, luego este ángulo se lo vamos a restar al ángulo que tiene la imagen de la gran sandia. Y eso lo hacemos modificando un poco tu último código, agregándole la direction_factor:

2.   Para el evento step de o_player_2: lo que vamos a hacer es modificar tu ultimo código agregándole la direction_factor.
[gml]
///STEP event - o_player_2
var id_1 = instance_nearest(x,y,o_ball_rot2)
var distance = point_distance(x,y,id_1.x,id_1.y);
owner = id_1;
x = owner.x + lengthdir_x(distance,owner.image_angle-direction_factor);
y = owner.y + lengthdir_y(distance,owner.image_angle-direction_factor);
[/gml]

Bueno eso es todo: Recuerda que debes crear una copia del proyecto antes de modificarlo, para que no se valla a colgar y me eches la culpa a mí...

Nos vemos.



102
Nombre del autor : Reyes Dávila.
Breve descripción de su función : Calcular la distancia  y la dirección entre dos puntos de igual forma que las funciones originales, sin usar las funciones originales.
Versión GM utilizada : Game maker 4.3c (March 4, 2003) hasta la Game Maker htm5.

Código del script:
point_direction_plus(x1,y1,x2,y2)
[gml]
///point_direction_plus(x1,y1,x2,y2)
//Obteniendo argumentos iniciales
//X1 y Y1 representan el origen o el objeto origen del cual se quiere
//tomar la dirección.
x1=argument0;
y1=argument1;
x2=argument2;
y2=argument3;

//Determinando las medidas entre puntos (no es la distancia entre puntos)
//No es más que el valor absoluto de la resta de los valores en X y Y.
//en otras palabras estamos calculando las longitudes de los catetos de
//un triángulo rectángulo, para luego poder emplear el teorema de pitagoras.
medidaX=abs(x1-x2); //medida en X
medidaY=abs(y1-y2); //medida en Y

//Calculando la dirección:
//Verificando que la longitud o medida X nunca llegue a cero para evitar error en la división.
//Si la medida llegara a cero se produciría un error de división, es
//por eso que cuando la medida X llega a cero se tomará un valor muy
//cercano a cero, pero nunca cero.
if(medidaX=0){medidaX=0.0005}

//Calculando el arco tangente de la división de la medida Y
//entre la medida X, esto es solo la formula trigonométrica que se
//utiliza para determinar el ángulo de un triángulo rectángulo.
angulo1=arctan(medidaY/medidaX);

//Pasando radianes a ángulo
//Como el resultado anterior es devuelto en radianes se
//utiliza la siguiente función para pasarlo a grados.
//Hay muchas formas de pasar radianes a grados:
//Usando la función radtodeg de la siguiente forma:
//angulo1=radtodeg(angulo1);
//O tambien podemos multiplicar radianes por 57.296 (ya
//que un radian son 57.296 grados) de la siguiente manera:
//angulo1=angulo1*57.296
//Yo prefiero la que no usa funciones del game maker.
angulo1=angulo1*57.296;

//Determinando el cuadrante del plano en donde se encuentra el punto (x2,y2).
//La fórmula anterior funciona correctamente solo para el cuadrante I del plano,
//es por eso que deben crearse condiciones para poder ajustar los valores
//según el cuadrante en donde se encuentre el punto.
cuadrante="";
if(x1 <= x2 && y1 >= y2){cuadrante="I"}
if(x1 >= x2 && y1 >= y2){cuadrante="II"}
if(x1 >= x2 && y1 <= y2){cuadrante="III"}
if(x1 <= x2 && y1 <= y2){cuadrante="IV"}

//Ajustando los valores según el cuadrante
//Según en donde se encuentre el punto en el plano, se sumarán o restarán
//los grados necesarios para poder obtener los grados correctos.

if(cuadrante="I"){angulo1=angulo1}
if(cuadrante="II"){angulo1=180-angulo1}
if(cuadrante="III"){angulo1=180+angulo1}
if(cuadrante="IV"){angulo1=360-angulo1}

//Devolviendo la dirección entre los puntos en grados.
return angulo1;

[/gml]

point_distance_plus(x1,y1,x2,y2)
[gml]
///point_distance_plus(x1,y1,x2,y2)
//Obteniendo argumentos iniciales
//X1 y Y1 representan el origen o el objeto origen del cual se quiere
//tomar la distancia.
x1=argument0;
y1=argument1;
x2=argument2;
y2=argument3;

//Determinando las medidas entre puntos (no es la distancia entre puntos)
//No es más que el valor absoluto de la resta de los valores en X y Y.
//en otras palabras estamos calculando las longitudes de los catetos de
//un triángulo rectángulo.
medidaX=abs(x1-x2); //medida en X
medidaY=abs(y1-y2); //medida en Y

//Calculando la distancia
//El teorema de Pitágoras
//Si a y b son las longitudes de los catetos de un
//triángulo rectángulo y c es la longitud de la hipotenusa,
//entonces la suma de los cuadrados de las longitudes de los
//catetos es igual al cuadrado de la longitud de la hipotenusa.
distancia=power(medidaX,2)+power(medidaY,2)
distancia=sqrt(distancia);

//Devolviendo la distancia
return distancia;


[/gml]
Modo de uso: se emplean igual que las funciones originales "point_direction" y "point_distance".
Fueron creadas para ser utilizadas si fallaren las funciones originales al exportar a alguna plataforma y también para que sirvan de guía a la hora de comprender cómo calculan la distancia y la dirección.

Imágenes que utilicé para entender el procedimiento



Bibliografías consultadas

Calcular ángulos
https://es.wikihow.com/calcular-%C3%A1ngulos

TRIANGULO ISÓSELES
https://es.wikipedia.org/wiki/Tri%C3%A1ngulo_is%C3%B3sceles

El teorema de Pitágoras
https://www.montereyinstitute.org/courses/DevelopmentalMath/TEXTGROUP-1-8_RESOURCE/U07_L1_T4_text_final_es.html
103
Hola, saludos

Bueno, recomiendo:

1. Que ambos usen la 1.
2. Que no se exijan mucho.
3. Que se repartan los niveles.
4. Que creen niveles identificando correctamente los sprites y objetos.
5. Que cada nivel sea absolutamente independiente del juego para evitar una confusión de objetos.
6. Primer paso: has un nivel, y dile a tu camarada que haga otro, luego une todo poco a poco.
7.Cada nivel debe ser un proyecto independiente
8. Cada nivel debe entregarse en estado funcional
9. Previamente definan la plataforma final: windows
10. Acepten las imperfecciones del otro compañero. No piensen en proyectos perfectos.


Un ejemplo:

Decido crear un nivel 1 para un juego x, entonces produzco un editable completo con solo el nivel 1 y lo mando a integrar al juego final. El encargado de integrar (que puede ser cualquiera porque todos tendrán una copia de cana nivel) integrara todo y luego creara una room dedicada a la portada.


Consejo: preferiblemente cada nivel debe estar compuesto por una sola room. Y si su intención es crear algo parecido a un rpg hay si van a tener problemas porque tendrán que organizarse muy bien para que todo encaje sin dificultades.
104
General / Mensaje de hoy, Lunes
Enero 25, 2021, 01:06:14 AM
Lunes 25 de enero del 2021

Imágenes de hoy:

5688709 / 6 images


xxolaxx / 101 images


Versículo:




1 Samuel 12:21 Y no deben desviarse para seguir las cosas irreales que no son de ningún provecho y que no libran, porque son irrealidades.

Proverbios 22:3 sagaz es el que ha visto la calamidad y procede a ocultarse, pero los inexpertos han pasado adelante y tienen que sufrir la pena.

1 Tito 3:3 Porque hasta nosotros en un tiempo éramos insensatos, desobedientes, extraviados, esclavizados a diversos deseos y placeres, ocupados en maldad y envidia, aborrecibles, y nos odiábamos unos a otros.

Santiago 4:13 Vamos, ahora, ustedes los que dicen: "Hoy o mañana iremos a tal ciudad y allí pasaremos un año, y negociaremos y haremos ganancias", 14 cuando el caso es que ustedes no saben lo que será su vida mañana. Porque son una neblina que aparece por un poco de tiempo y luego desaparece. 15 En vez de eso, deberían decir: "Si Jehová quiere, viviremos y también haremos esto o aquello".


Definiciones:




Sagaz adj. (lar. Sagax, -acis, que tiene buen olfato, sagaz, de sagire, oler la pista). Que tiene una habilidad especial para comprender o percibir una cosa de manera clara y rápida: detective sagaz. 2. Se dice del animal, especialmente del perro, hábil para percibir la presencia de la caza.


Mensaje:




La internet está sobrecargada de contenido perjudicial saturándonos la mente, es por eso que a algunas personas se nos hace difícil dedicarnos a estudiar y aprender, por eso es bueno alejarnos un tiempo de la web y dejar de usar tanto las redes. Aunque sea difícil los primeros días, nos iremos acostumbrando a la vida real y lograremos encontrar nuestro equilibrio. He notado que cuando me alejo de la internet me hago más fuerte y cuando regreso a las redes mi léxico mejora e impacta más y recibe mejor aceptación, inclusive mis ideas son más aceptadas, creo que eso se debe a que en el internet las palabras son repetidas, pero cuando uno escapa a la realidad obtiene nuevos conceptos y nuevas ideas que causan sensación.

Este es el último mensaje que escribo por los momentos, me voy a apartar un tiempo de las redes, pienso volver en marzo y de esta forma podré demostrarles con el nuevo léxico que adquiera; que nuestra fuerza aumenta cuando nos alejamos del internet.

Si dios quiere, viviremos y volveremos con más imaginación y alegría.


Videos recomendados:




Top Gear on Fingerstyle by Fabio Lima


Cómo REALMENTE Convertirse en Tu Mejor Versión (3 pasos difíciles)

105
General / Mensaje de hoy, Domingo
Enero 24, 2021, 03:24:39 AM
Domingo 24 de enero del 2021

Imagenes de hoy:

Myriams-Fotos / 1714 images


Free-Photos / 9086 images


stokpic / 229 images


Charnchai / 19 images


paisaje de fantasía con paso a través de diferentes universos - Foto de stock


Pixabay - bertvthul / 17 images


istockphoto.com - retrato de una deportista femenina iluminada por luces de neón por la noche - Foto de stock


Pixabay - StockSnap / 27556 images


Versículo:




Proverbios 14:23 Por toda clase de trabajo afanoso llega a haber una ventaja, pero meramente la palabra de los labios [tiende] a la carencia.

Proverbios 17:22 Un corazón que está gozoso hace bien como sanador, pero un espíritu que está herido seca los huesos.

Mateo 7:12 Así que, todas las cosas que queráis que los hombres hagan con vosotros, así también haced vosotros con ellos; porque esto es la ley y los profetas.

Hechos 20:35 En todas las cosas les he exhibido que por medio de laborar así tienen que prestar ayuda a los que son débiles, y tienen que tener presentes las palabras del Señor Jesús, cuando él mismo dijo: 'Hay más felicidad en dar que en recibir'".


Definiciones:




Tesón: s.m. Firmeza, constancia, perseverancia.


Mensaje:




Es necesario tener buena autoestima y sentirnos contentos para poder enfrentar los retos diarios. Si quieres tener autoestima y estar motivado, debes dedicarte a motivar a otros, a darles alegría a las personas, y serán esas mismas personas las que te darán alegría a ti cuando la necesites.


Videos recomendados:



Increíble discurso de Arnold Schwarzenegger - Una verdadera inspiración - Reglas para el éxito


Daft Punk | Something About Us | Pomplamoose