EL archivo que he subido contiene todo lo que expliqué, puedes revisar el código fuente, usé :GM8:
Cualquier pregunta déjame un mensaje y trataré de solucionarlo :)
Cualquier pregunta déjame un mensaje y trataré de solucionarlo :)
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.
// STEP EVENT
if e_walk=false then image_angle=point_direction(x,y,personaje.x,personaje.y);
//CREATE EVENT
e_walk=true;//variable que acepta que el enemigo camine por donde quiera.
e_moving=0;//variable que elige la dirección donde irá el personaje
alarm[0]=room_speed*2; //cada cuanto tiempo e_moving cambiará su valor para que camine en cierta dirección
//ALARM 0 EVENT
e_moving=choose(0,1,2,3,4);
alarm[0]=room_speed*2;
//STEP EVENT
if (distance_to_object(personaje)<60) then e_walk=false;
else e_walk=true;
//enemigo vagando... los sprites los colocas a tu gusto
if (e_walk==true)
{
switch(e_moving)
{
case 1: x+=4;break;// DERECHA
case 2: x-=4;break;// IZQUIERDA
case 3: y+=4;break;// ABAJO
case 4: y-=4;break;// ARRIBA
}
}
//CREATE EVENT
y2=20;//altura del enemigo
x2=20;//ancho del enemigo
//STEP EVENT
if (e_walk==false)//el enemigo va a mirar
{
if(personaje.y>y+y2) then sprite_index=e_sprt_up;//Arriba
else if(personaje.y<y) then sprite_index=e_sprt_down;//Abajo
else if (personaje.x>x+x2) then sprite_index=e_sprt_right;//Derecha
else if(personaje.x<x) then sprite_index=e_sprt_left;//Izquierda
}
/*cuando el la condición del control se cumpla (ubicas este código en tu objecto botella en el step pero no en el evento create)*/
image_angle=random_range(0, 360);
//los enemigos deben tener variables que sepan donde exactamente ellos se originan:
//evento create - objeto enemigo-
origin_x=x;/*origenes del enemigo: eso depende de que ubicación esten en mapa; por lo tanto esos valores se guardarán en estas variables*/
origin_y=y;
elife=100;//vida del enemigo supongo que tu lo has hecho de otra manera
//acción de dato de tu personaje al enemigo ,por ejemplo:
//puñetazo:
var eid;//identificación del enemigo
if keyboard_check_button(vk_control) and distance_to_object(obj_enemigo)<1
{
eid=instance_nearest(x,y,obj_enemigo);//los puntos centrales de tu personaje indicarán, que objeto está más cerca a este
eid.elife-=10;//le quito parte de la vida al objeto que está más cerca de mi puñete
if eid.life<=0
{
instance_create(eid.origin_x,eid.origin_y,obj_enemigo);// se crea "OTRO" enemigo aparte del que tienes su ID
eid.instance_destroy();//el enemigo se destruye, pero tiene un nuevo enemigo
}
}
//Eventos de Acción con el mouse
if mouse_check_button_pressed(mb_left)
/*para declarar los botones del dispositivo mouse se utiliza mb_ e instantáneamente verás que aparecera el resto de botones*/
//evento create:
colisionando_moneda=false;//variable que detecta si ha colisionado con una moneda
an=0;//variable de animación (para que recorra todos las subimagenes de tu animación)
//evento step:
//generar colisión
if distance_to_object(obj_moneda)<1
{
colisionando_moneda=true;
with(obj_moneda){instance_destroy();}
}
//evento draw:
if colisionando_moneda==true //cuando termine la animación, esta dejará de dibujarse
{
draw_sprite(spr_moneda_1,an,obj_personaje.x,obj_personaje.y-cuerpo);
an+=1;
}
if an>=10 {//suponiendo que es valor maxímo de subimagenes
colisionando_moneda=false;
an=0;
}
//en el evento create
heroe[0]=instance_create( x, y, obj_heroes);
heroe[1]=instance_create( x, y, obj_heroes);
HvsE[0]=false;//variable que muestra si nuestro personaje esta en posición de pelea
HvsE[1]=false;
EID[0]=0;//variable que muestra con quien(con que instancia) el heroe está peleando.
EID[1]=0;
SetControlsTo=heroe[0];//da los controles a la instancia o primer heroe por defecto, el resto depende de ti.
//en el evento step
with(heroe[0])
{
if distance_to_object(obj_enemigo)<0{
temp=instance_nearest(x,y, object_enemigo);/*cuando el enemigo este cerca del heroe que le de a nuestra variable */ if temp!=EID[1] {/* si el enemigo que está cerca a ti es diferente con el que está peleado con el otro heroe*/
HvsE[0]=true;
EID[0]= temp; }/*si no se cumple está condición simplemente el héroe ignorará el enemigo que está luchando con tu otro héroe.*/
}
}
//generar controles para la instancia dada a SetControlsTo
with(SetControlsTo){//los controles que le quieras dar depende de ti
if keyboard_check_button(ord('A')) then x-=2;
else if keyboard_check_button(ord('D')) then x+=2;
} //lo que puedes hacer con esto es que si tu heroe[0] está ocupado con un enemigo entonces le quitas los controls
//ejemplo:
if HvsE[0]==true then SetControlsTo=HvsE[1];//entiendes?
/*puedes usar la función distance_to_object, pero en este caso yo también usaré con las coordenadas del objeto "Plataforma"
te recomiendo que pongas el origen de las ordenadas( eje Y) de la imagen de tu plataforma*/
//en el evento Step del personaje pones el siguiente código:
if distance_to_object(plataforma)<1 and y<plataforma.y{
y=plataforma.y;//esto variará dependiendo a lo que quieres hacer más adelante
}
/*Create (creamos la variable tiempo en su máximo valor (en este caso haré el máximo puedes invertirlo si deseas) y creamos la alarma también crearé una variable llamada conteo que recibirá el tamaño máximo de la barra)*/
tiempo=45;
conteo=0;
alarm[0]=room_speed*1;
//en tu alarm[0]
alarm[0]=room_speed*1;
tiempo-=1;
//Finalmente en el evento Draw
//aca el 100% seria el valor 200
draw_set_color(c_white);
draw_rectangle(x,y,x+200,y+30,true);
draw_set_color(c_green);
conteo=200*(tiempo*100/45)/100;// la barra baja de tamaño proporcionalmente gracias a que depende de porcentajes
if conteo>0 then draw_rectangle(x,y,x+conteo,y+30,false);
/*CONCLUSIÓN: EL TAMAÑO DE LA BARRA BAJA CON RESPECTO A SU PORCENTAJE; ES DECIR, SI "TIEMPO" AL PASAR UN SEGUNDO A BAJADO UN 2%; ASIMISMO, BAJARA UN 2% EL TAMAÑO DE LA BARRA PERO CUANDO "TIEMPO" HAYA BAJADO A CERO
BAJO SU 100% Y CUANDO BAJA ESA CANTIDAD TAMBIÉN BAJARÁ LA BARRA UN 100% QUE PARA LA BARRA ES TODO SU TAMAÑO.*/
//depende de la dirección del personaje
/*"fuera" es tu variable que representa la distancia que consideres suficiente lejos de tu personaje(desde su punto centro, considera su punto centro de coordendas) no colisione con la bomba*/
if keyboard_check_pressed(vk_ctrl){
switch(direccion)
{
/*EJEMPLO: cuando el sprite del personaje está mirando hacia la derecha es porque lógicamente vienes caminando
por esa dirección y al momento que te detuviste sigues mirando esa dirección; por lo tanto, la bomba lo dejarás detrás tuyo*/
case "derecha":
instance_create(x-fuera,y,obj_bomba);
break;
case "izquierda":
instance_create(x+fuera,y,obj_bomba);
break;
case "arriba":
instance_create(x,y+fuera,obj_bomba);
break;
case "abajo":
instance_create(x,y-fuera,obj_bomba);
break;
}
}
//creo una variable cualquiera
solidez=0;
//realizo las acciones
if distance_to_object(obj_bomba)>0 then solidez=1;
//como no hay un "else" (en otra condición) entonces, solidez seguirá siendo 1 y no cambiara más
//condición final
if distance_to_object(obj_bomba)<1 && solidez==1 {
//la condición que impide el movimiento (puede ser suya propia)
switch(direccion)
{//esto hará que el eje que está avanzando se reste con si mísmo y generara un impedimento al avanzar
case "derecha":
x-=1;
break;
case "izquierda":
x+=1;
case "arriba":
y+=1;
break;
case "abajo":
y-=1;
}
}
//Evento create del objeto personaje
life=100
//mensionar la variable de otro objeto poniendo el punto de pertenencia "."
draw_text(x,y,PERSONAJE.life)
PERSONAJE.life-=50
Page generada en 0.025 segundos con 11 consultas.