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

106
Cita de: Naitsabes0 en Octubre 01, 2017, 04:17:12 AM
Cita de: cristopher2545 en Octubre 01, 2017, 02:40:16 AM
Cita de: Naitsabes0 en Octubre 01, 2017, 01:15:43 AM
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.

Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento.  :-\



CODIGO CREATE DEL JUGADOR vamos a hacer que el jugador cree las bolas



///Creacion de las bolas

for(i=0; i<5; i++) //cantidad de bolas
    {
     id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
     with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
   }


y ya no hay mas te agrego una captura de como se ve , aveces debes de hacer mas de lo que crees para que algo funcione

Debo admitir que se ve bien.

El funcionamiento es como el que especificas, las bolas van manteniendo una distancia = a la anterior, asiendo que orbiten sin romper la formación, podrían dar esto por resuelto, lo único que me causa inquietud es que a pesar de que modifico sus valores para distanciar un poco las bolas del jugador, la bola 1° o al menos la que esta mas cerca del jugador, pierde utilidad por estar dentro de el, como en la formación circular nunca una bola tocaba al jugador, pensé que consideraría al jugador como la zona de inicio para crear la 1° bola a un lado de este en vez de tenerlo encima, un detalle que no considere al empezar el post por creer que se formaría alejado de su centro ¿debería sumarle alguna variable a las funciones ya creadas o crear otra linea de código?.

Ya que lo he dejado así:
COLLISION obj_Jugador
[codigo]
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
    {
     id_bola=instance_create(obj_Jugador.x, obj_Jugador.y,obj_Bola_Orbital_Linea)
     with(id_bola) {distancia=(x-obj_Jugador.x+48)*other.i} // distancia de las bolas
   }
instance_destroy()
[/codigo]
Lo que explicaría el porque las distancias han sido separadas para parecer una linea de proyectiles mas que una barrera.


vale eso es porque no le estamos dando un valor a la y bien lo único que debes agregar es cambiar este codigo

///Creacion de las bolas

for(i=0; i<5; i++) //cantidad de bolas
    {
     id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
     with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
   }


por este otro aunque parecen lo mismo agregamos una nueva variable de distancia entre la primera pelota y el jugador

///Creacion de las bolas

for(i=0; i<9; i++) //cantidad de bolas
    {
     bola=instance_create(obj_player.x, obj_player.y,obj_orb)
        with(bola) {distancia=(x-obj_player.x+20)*other.i+(y-obj_player.y+100)} // variable X y Y
   }


donde
(x-obj_player.x+20) // es la distancia entre cada bola

y

(y-obj_player.y+100) // es la distancia entre la bola y el player


si lo haces bien te deberia quedar asi
107
Cita de: Naitsabes0 en Octubre 01, 2017, 01:15:43 AM
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.

Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento.  :-\



CODIGO CREATE DEL JUGADOR vamos a hacer que el jugador cree las bolas



///Creacion de las bolas

for(i=0; i<5; i++) //cantidad de bolas
    {
     id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
     with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
   }


y ya no hay mas te agrego una captura de como se ve , aveces debes de hacer mas de lo que crees para que algo funcione
108
me imagino no borraste la variable "animacion" verdad? en fin solo un consejo no copies todo el codigo entero y te quedes asi ve el codigo desarmalo ve la logica y despues lo copias y lo pegas asi no sabras que estas haciendo cuando tomas un codigo ajeno y tratas de meterlo en tu proyecto. te dejo ele ditable que teniene el mismo codigo añadiendo algunas coas que falte agregar
109
en vez de usar alarmas podrías usar una variable que controle el tiempo por ejemplo elimina las alarmas que manejen el movimiento y las remplazas por una variable

create del player

tiempo=0 //el tiempo no se mueve


Step del player en donde tienes este codigo
///Evento step
if(keyboard_check(vk_nokey))
{
    if(!alarm[0]) alarm[0] = room_speed * 5; //Segundos que tarde en poner la animación
}
else//Aquí, esto es un else. ¿Sabes lo que es un else?
{
    //todo lo que está aquí se ejecuta al presionar alguna tecla.
    alarm[0] = -1;//Cancelar la alarma.
    sprite_index = sCaminando; //O cualquier cosa.
}


lo cambias por este otro


///Evento step
if(keyboard_check(vk_nokey))
{
    tiempo+=1 //suma un punto a la variable mientras no te muevas
}
else
{
tiempo=0 //si te mueves o siempre que te muevas reseteas la variable a 0
animacion=0
}

//añadimos un valor limite a la variable tiempo por ejemplo 90 steps

if tiempo >90
{
animacion=choose(1,2,3,4)
if animacion!=0
{
tiempo=0 // si la animación no es la normal ponemos el relog a 0 hasta que el player se vuelva a mover
}
}


y finalmente añadimos un trozo de codigo que ara que el player cambie a la animacion de caminar

if animacion=0
{
sprite_index="animacion de caminar"
{
110
podrias tratar donde esta el código de animaciones de tu personaje poner


if animaciones=0
{

todo el codigo de aniamciones del personaje caminar correr saltar

}
111
puedes crear una variable nueva que tenga las animaciones por ejemplo depende de las animaciones es el limite del numero que tendras

create del player

animacion=0; //no hay animacion


step del player aqui le asignamos una animacion a cada valor numerico de la variable animacion asi cuando toque ese numero tendras la animacion que desees

if animacion=1
{
sprite_index="alguna animacion"
}else
if animacion=2
{
sprite_index="alguna animacion"
}else
if animacion=3
{
sprite_index="alguna animacion"
}


en la alarma donde tienes este codigo

///Evento alarma
//cambiar animación
sprite_index = sIdle;

lo cambias por este
///Evento alarma
//cambiar animación
animacion=choose(,1,2,3,4) //depende de las animaciones que tengas sera los numeros que pongas

;

finalmente para acabar en el codigo donde manejas las alarmas añadimos un reset a la variable para que no se quede la animacion


///Animacion de espera
if(keyboard_check(vk_nokey))
{
    if(!alarm[0]) alarm[0] = room_speed * 5; //Segundos que tarde en poner la animación
}
else alarm[0] = -1; //Cancelar la alarma
animacion=0 //esto pone las animaciones a 0 eso quietre decir que volveras a tener tu set de animaciones activo
112
Preguntas y respuestas / Re:PERSONAJE QUE SIGA AL PLAYER
Septiembre 26, 2017, 09:24:17 PM
supongo que puedes usar el pathfinding aunque ahi no tengo experiencia pero encontre este video talvez te de una idea esta en ingles pero se puede ver como los enemigos hacen su trabajo https://www.youtube.com/watch?v=olE_gLbESnE
113
tengo un codigo que es bastante grande pero que hace lo que nesecitas
114
Preguntas y respuestas / Re:PERSONAJE QUE SIGA AL PLAYER
Septiembre 21, 2017, 10:34:26 PM
Cita de: Naitsabes0 en Septiembre 21, 2017, 10:12:30 PM
O pueden hacer el truco que utilizan muchos juegos al crear un compañero permanente que sigue al jugador, y no es nada mas y menos que el amigo volador o trepador de pequeño tamaño, por dar un ejemplo están estos.

Los que lo siguen volando.

La hada que mas odio de los juegos por ser muy agobiante con sus sonidos de bucle.
Navi /The Legend of Zelda: Ocarina of Time


El gato/murciélago anaranjado.
fidget/ DUST: AN ELYSIAN TAIL
https://i.gyazo.com/51a04787630ce80b1a5c91053915b685.gif

Los que lo siguen encima (literalmente).

El murcielago purpura
Laylee /Yooka-Laylee


El pájaro rojo
Kazooie /Banjo-Kazooie


Incluso en mi trailer de juego tengo poderes que crean objetos que siguen al jugador a donde sea que vaya


Honestamente te aconsejo que experimentes con lo básico, ya que si haces un compañero que te siga el cual no hace absolutamente nada, seria desperdiciar las ventajas que este puede tener, en mi caso los objetos que creo se encargan de proteger al jugador de los enemigos, algo asi como el Aku-Aku de crash bandicoot, el cual tiene la principal función de proteger al jugador de impacto y colisiones enemigas, y como puedes ver el vuela y ignora toda programación de colisiones con todo, como puedes ver es estrategia en vez de crear elementos innecesarios.

pues que te puedo decir tienes un punto ahi pero mira tails por ejemplo es prácticamente inutil en cada juego donde lo veo salta a barrancos se pega contra cosas hace prácticamente lo que le entra en gana un compañero no forzosamente tiene que ser util para estar en un juego un compañero debe estar ahi para servir de distracción a los enemigos seamos serios aun no hay un compañero que sea totalmente util para lo que el jugador quiere  que sea automático eh independiente generalmente los compañeros solo  sirven como un escudo o como un arma movil que ataca a todo ser que se le atraviesa enfrente otro ejemplo son las mascotas en el juego castle crashers son inutiles hasta cierto punto que sio que atacan algunas veces y hacen cosas como recoger comida o eso pero que te digo yo en mi opinion personal

un compañero es una distracción para los enemigos es intuil es bonito y te da el conosimiento nesesario para crear enemigos que si valgan la pena.  :)
115
Preguntas y respuestas / Re:PERSONAJE QUE SIGA AL PLAYER
Septiembre 21, 2017, 08:18:15 PM
Cita de: nonoroman en Septiembre 21, 2017, 11:31:04 AM
Lo primero, muchas gracias cristopher por contestar.

La verdad es que yo he pensado en otro metodo. Pero ya que me comentas este, le echare una ojeada.

Por cierto,  tu lo has probado?? Funciona??

Otra cosa, eso del yplus para subir cuestas no lo conocia. Me puedes explicar un poco mas como funciona yplus??

El tema de subir escaleras en el metodo que yo he pensado en teoria deberia de funcionar. Pero tengo que probarlo.

En cualquier caso, cuando consiga hacer una prueba ya os comento.

Muchas gracias. A ver si entre todos lo conseguimos hacer!!!  ;)

Cita de: cristopher2545 en Septiembre 21, 2017, 03:44:01 AM
Me intereso mucho el tema y te traigo la solución a la mitad de tus dudas vamos a crear un enemigo que sigue al jugador y que se frena al estar a cierta distancia del jugador también el enemigo salta al detectar que no hay suelo debajo de el... (este código es experimental) bien empecemos ya? cabe destacar que el  código  es una versión modificada de shaun spalding y que ya tiene las colinas programadas así que tu personaje subirá colinas sin esfuerzo

vamos a crear un nuevo objeto yo le llamare OBJ_CPU y dentro de el escribiremos el siguiente codigo

en el evento CREATE del cpu

///iniciar variables
grav = 0.5; //gravedad
hsp = 0; //velocidad horizontal siempre a 0 para que el personaje no se mueva
hsp_carry = 0; //sirve para mantener al cpu sobre plataformas moviles
vsp = 0; //velocidad vertical siempre a 0 para evitar movimiento
ground=true; // estas en el suelo?
hsp_final=0 //velocidad máxima en horizontal
jump=false //evita que al saltar el enemigo se frene en el aire por la distancia


bien ya que declaramos variables agregaremos código para que el personaje o CPU haga su trabajo

en el evento STEP del cpu


//colision horizontal
if place_meeting(x+hsp,y,obj_wall)
{
    yplus = 0;
    //subir las cuestas
    while (place_meeting(x+hsp,y-yplus,obj_wall) && yplus <= abs(1*hsp)) yplus += 1;
    if place_meeting(x+hsp,y-yplus,obj_wall)
    {
        while (!place_meeting(x+sign(hsp),y,obj_wall)) x+=sign(hsp);
        hsp = 0;
    }
    else
    {
        y -= yplus
    }
}
x += hsp;
//bajar las cuestas
if !place_meeting(x,y,obj_wall) && vsp >= 0 && place_meeting(x,y+2+abs(hsp),obj_wall)
{while(!place_meeting(x,y+1,obj_wall)) {y += 1;}}

//este pedazo de codigo sirve para que el cpu siga al jugador

if instance_exists(obj_player)
{

if sign(obj_player.x - x) == -1   hsp=-2.5; //puedes modificar el valor hsp para la velocidad a la que se mueve el cpu
if sign(obj_player.x - x) == 1  hsp=2.5;       //puedes modificar el valor hsp para la velocidad a la que se mueve el cpu 
    }

        if abs(obj_player.x-x ) < 45 && jump=false //este valor sirve para que el cpu se detenga entre mas alto mas lejos estara del jugador
 
    {
   hsp=0
   }




// este código sirve para que el cpu salte sobre bloques y agujeros (es algo inestable)
if place_meeting(x+10,y, obj_wall)
    {
    vsp = -9;
jump=true
    }
if place_meeting(x-10,y, obj_wall)
    {
    vsp = -9;
jump=true
    }






//colision vertical
if (place_meeting(x,y+vsp,obj_wall))
{
    while(!place_meeting(x,y+sign(vsp),obj_wall))
    {
        y += sign(vsp);
    }
    vsp = 0;
}
y += vsp;

//gravedad
if (vsp < 10) vsp += grav;

//estas en el suelo?
if place_meeting(x, y+vsp+1, obj_wall)
{
    ground = true;
jump=false
}
else
    ground = false;
   



sobre lo de subir escaleras y eso te la debo realmente no se como podría ser la lógica para eso


wow wow WOW! son muchas preguntas soy solo un hombre aquí  :love: pero bueno tratare de responderlas todas ya que solo soy un novato en esto del gml jaja

el método funciona porque yo lo programe, este codigo es una vercion modificada de la inteligencia artificial enemiga para el beat em up que desarollo asi que funciona perfectamente <3 ,el personaje te sigue hasta el infinito y se detiene a cierta distancia de tu personaje esta variable se cumple siempre algo parecido a tails en sonic el erizo el sigue a sonic pero cuando sonic frena el también lo hace justo a una distancia predeterminada para no quedar mal posicionado todos los codigos funcionan bien exceptuando el de salto del cpu el cual se buguea un poco pero hace su función el cpu salta cuando ve un agujero siempre.

no te voy a mentir desconozco muy bien que hace yplus ya que ese código es parte del código de shaun spalding pero usando la lógica yplus empieza en 0 cuando no estas en una colina y va sumando de uno en uno cuando estas subiendo una y restando de uno en uno cuando la vaz bajando el código de bajada lo invento un tipo en los comentarios de dicho vídeo ya que shaun solo programo el de subida realmente no se explicar bien porque desconozco mucho la función pero funciona solo debes poner colinas no mayores a 45 grados y el personaje y enemigos la subirán sin problemas

yo creo que si nos ponemos a pensar un poco es jugar con el pathfinding del cpu detectar si el personaje esta muy arriba en el plano y a la vez que detectar si no tiene plataformas para subir o escaleras para trepar de no ser asi quedarse quieto hasta que el jugador baje de lo contrario subir por las plataformas para alcanzar al jugador pero claro planearlo es mas facil y programarlo es cuando el dolor empieza jaja

no hay problema colega cuando consigas algo compartelo para poder ver que lograste y poder nutrirnos con los metodos  :) saludos
116
Preguntas y respuestas / Re:PERSONAJE QUE SIGA AL PLAYER
Septiembre 21, 2017, 03:44:01 AM
Me intereso mucho el tema y te traigo la solución a la mitad de tus dudas vamos a crear un enemigo que sigue al jugador y que se frena al estar a cierta distancia del jugador también el enemigo salta al detectar que no hay suelo debajo de el... (este código es experimental) bien empecemos ya? cabe destacar que el  código  es una versión modificada de shaun spalding y que ya tiene las colinas programadas así que tu personaje subirá colinas sin esfuerzo

vamos a crear un nuevo objeto yo le llamare OBJ_CPU y dentro de el escribiremos el siguiente codigo

en el evento CREATE del cpu

///iniciar variables
grav = 0.5; //gravedad
hsp = 0; //velocidad horizontal siempre a 0 para que el personaje no se mueva
hsp_carry = 0; //sirve para mantener al cpu sobre plataformas moviles
vsp = 0; //velocidad vertical siempre a 0 para evitar movimiento
ground=true; // estas en el suelo?
hsp_final=0 //velocidad máxima en horizontal
jump=false //evita que al saltar el enemigo se frene en el aire por la distancia


bien ya que declaramos variables agregaremos código para que el personaje o CPU haga su trabajo

en el evento STEP del cpu


//colision horizontal
if place_meeting(x+hsp,y,obj_wall)
{
    yplus = 0;
    //subir las cuestas
    while (place_meeting(x+hsp,y-yplus,obj_wall) && yplus <= abs(1*hsp)) yplus += 1;
    if place_meeting(x+hsp,y-yplus,obj_wall)
    {
        while (!place_meeting(x+sign(hsp),y,obj_wall)) x+=sign(hsp);
        hsp = 0;
    }
    else
    {
        y -= yplus
    }
}
x += hsp;
//bajar las cuestas
if !place_meeting(x,y,obj_wall) && vsp >= 0 && place_meeting(x,y+2+abs(hsp),obj_wall)
{while(!place_meeting(x,y+1,obj_wall)) {y += 1;}}

//este pedazo de codigo sirve para que el cpu siga al jugador

if instance_exists(obj_player)
{

if sign(obj_player.x - x) == -1   hsp=-2.5; //puedes modificar el valor hsp para la velocidad a la que se mueve el cpu
if sign(obj_player.x - x) == 1  hsp=2.5;       //puedes modificar el valor hsp para la velocidad a la que se mueve el cpu 
    }

        if abs(obj_player.x-x ) < 45 && jump=false //este valor sirve para que el cpu se detenga entre mas alto mas lejos estara del jugador
 
    {
   hsp=0
   }




// este código sirve para que el cpu salte sobre bloques y agujeros (es algo inestable)
if place_meeting(x+10,y, obj_wall)
    {
    vsp = -9;
jump=true
    }
if place_meeting(x-10,y, obj_wall)
    {
    vsp = -9;
jump=true
    }






//colision vertical
if (place_meeting(x,y+vsp,obj_wall))
{
    while(!place_meeting(x,y+sign(vsp),obj_wall))
    {
        y += sign(vsp);
    }
    vsp = 0;
}
y += vsp;

//gravedad
if (vsp < 10) vsp += grav;

//estas en el suelo?
if place_meeting(x, y+vsp+1, obj_wall)
{
    ground = true;
jump=false
}
else
    ground = false;
   



sobre lo de subir escaleras y eso te la debo realmente no se como podría ser la lógica para eso

118
si usas Drag and drop  en donde dice ad event usa el evento llamado <KEY PRESS> de ahi se despliega un pequeño menú que te deja escoger todas las teclas disponibles escojes la que deseas y pones tu codigo de salto ahi asi no importa si mantienes la tecla precionada si no la vuelves a precionar y la accion que esta dentro de tu código se cumple saltaras


si usas GML puedes usar y hace lo mismo que la de arriba  :)


if Keyboard_check_pressed(vk_space)
{

//codigo de salto
}
119
yup gracias por la respuesta pero también  eh estado ahi colega parece ser deberé retazar un poco mas este proyecto aun asi gracias por intentar
120
losiento colega lo que sea que estes haciendo mal es por tu parte replique exactamente el mismo codigo que diste aqui y a mi me suma el tiempo pasando del limite tengo 130 de inicial y si toco mi punto me da mas tiempo y se acumula con

global.tiempo+=30

lo que sea que estés haciendo es por tu parte colega