Autor Tema: Rpg estilo South Park  (Leído 122 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ares074

Rpg estilo South Park
« en: Septiembre 22, 2018, 06:16:52 am »
Hola mi duda es esta, Si alguien a jugado los 2 últimos juegos South Park tal vez me entienda mejor, bueno mi duda es como hacer que mi personaje pueda atacar solo cuando se escuche un sonido y si no lo ase en ese tiempo pierda su oportunidad de atacar y que cada vez que se escuche el sonido haga un ataque diferente.

Si pude programarlo y me funciona mas o menos bien lo que hice fue crear un contador que cuando llega a cierta cantidad se escuche el sonido si el personaje presiona space mientras se escucha el sonido pueda atacar, pero mi código no me convence cree muchas variables y  es muy confuso y creo que a la larga me puede dar problemas cuando implemente mas cosas por eso quiero saber mas sugerencias para poder simplificarlo.

Las mecánicas de mi juego son muy parecidas al juego de South Park cada ves que le tocar atacar a mi personaje se mueve hacia el enemigo seleccionado y ay es cuando  tiene que atacar
No pongo el código que hice por que creo que seria difícil de entender por la cantidad de variables que cree pero si lo ven necesario lo publico


 
No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado HKaichim

Re:Rpg estilo South Park
« Respuesta #1 en: Septiembre 22, 2018, 01:46:27 pm »
Yo no entiendo a la perfeccion del como lo harias...? Seria algo como ejemplo: Se cae una caja a tu derecha el personaje se mueve hacia ella a recogerla por asi decirlo?
 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Ares074

Re:Rpg estilo South Park
« Respuesta #2 en: Septiembre 22, 2018, 10:43:57 pm »
Si, seria algo como la caja no mas que para poder agarrar la caja tendría que a ver una señal ya sea un sonido o una imagen y solo la puede recoger mientras exista la señal si lo ase cuando no esta la señal pierde la oportunidad de recoger la caja
 

Desconectado HKaichim

Re:Rpg estilo South Park
« Respuesta #3 en: Septiembre 22, 2018, 11:02:48 pm »
Si, seria algo como la caja no mas que para poder agarrar la caja tendría que a ver una señal ya sea un sonido o una imagen y solo la puede recoger mientras exista la señal si lo ase cuando no esta la señal pierde la oportunidad de recoger la caja
Yo no estoy del muy seguro del como hacerlo ya que no lo he intentado jamas y tampoco soy un genio del GM, pero creo que si juegas con las variables podrias y algunas ID de direccion podria funcionar. Yo intentaria hacerlo de la siguiente manera:
CREATE
Código: [Seleccionar]
globalvar sonidos;
sonidos=false;
Entonces ya con esto tengo la variable que se podria activar cada vez que pase el tiempo del sonido.... digamos un ejemplo si el sonido dura 90Seg entonces la variable se activa a true; durante ese tiempo y al pasar vuelve a caer en false; si tomamos encuenta una variable como la que me dio un amigo para seguir por la ID ayudaria mucho
Código: [Seleccionar]
//Código1 - El obj2 elige al obj1 más cercano para comenzar a seguirlo
if sonidos=true{
id_seguir = noone //Declaramos una variable de instance (debes llamar el Id del objeto para leerla)
var distancia;
distancia = -1; //Declaramos una variable local (Existe en el código y cualquier objeto la puede leer, es casi como una variable global, pero se destruye al terminar de ejecutar este código)
with (Objeto que genera el sonido) if (my_id = 0 || my_id = 1) {
if (other.id_seguir = noone) { other.id_seguir = id; distancia = point_distance(other.x,other.y,x,y) }
else {
var new_distancia;
new_distancia = point_distance(other.x,other.y,x,y)
if new_distancia < distancia { other.id_seguir = id; }
}
}

//Código2 - El obj2 se desplaza hacia el objetivo que quiere seguir
if id_seguir != noone {
var velocidad;
velocidad = 4;
if point_distance(x,y,id_seguir.x,id_seguir.y) > velocidad {
var direccion;
direccion = point_direction(x,y,id_seguir.x,id_seguir.y);
x += lengthdir_x(velocidad,direccion)
y += lengthdir_y(velocidad,direccion)
}
}
}
Creo que esto pueda funcionar no lo sé debo revisar... "Espero al menos haberte dado una idea"
 
Los siguientes usuarios dieron las gracias a este tema: Yuzo

Desconectado HKaichim

Re:Rpg estilo South Park
« Respuesta #4 en: Septiembre 22, 2018, 11:15:37 pm »
Acabo de intentar el codigo que te di y si me funciono con las variables lo arme de la siguiente manera "No se si te sirva de esta forma"
Object0 o Player
Create
Código: [Seleccionar]
globalvar my_id;
my = id;
Bengin Step
Código: [Seleccionar]
if sonido = true{
//Código1 - El obj2 elige al obj1 más cercano para comenzar a seguirlo
id_seguir = noone //Declaramos una variable de instance (debes llamar el Id del objeto para leerla)
var distancia;
distancia = -1; //Declaramos una variable local (Existe en el código y cualquier objeto la puede leer, es casi como una variable global, pero se destruye al terminar de ejecutar este código)
with (object1) if (my_id = 0 || my_id = 1) {
if (other.id_seguir = noone) { other.id_seguir = id; distancia = point_distance(other.x,other.y,x,y) }
else {
var new_distancia;
new_distancia = point_distance(other.x,other.y,x,y)
if new_distancia < distancia { other.id_seguir = id; }
}
}

//Código2 - El obj2 se desplaza hacia el objetivo que quiere seguir
if id_seguir != noone {
var velocidad;
velocidad = 4;
if point_distance(x,y,id_seguir.x,id_seguir.y) > velocidad {
var direccion;
direccion = point_direction(x,y,id_seguir.x,id_seguir.y);
x += lengthdir_x(velocidad,direccion)
y += lengthdir_y(velocidad,direccion)
}
     }
        }
"object1" sera el evento con el sonido.
object1
Create
Código: [Seleccionar]
globalvar seguir;
seguir = id;

globalvar sonido;
sonido = false;
Ya con esto controlo parte de las variables luego coloque una "alarm" que me dirige a la acción del sonido y una variable que coloca durante ese tiempo en "true" al acabar el tiempo pasa a "false" y se dirige al siguiente evento mas cercano que esta en true.

Desconectado HKaichim

Re:Rpg estilo South Park
« Respuesta #5 en: Septiembre 22, 2018, 11:25:22 pm »
:'v Checalo y me dices que tal
 
Los siguientes usuarios dieron las gracias a este tema: Ares074

Desconectado Ares074

Re:Rpg estilo South Park
« Respuesta #6 en: Septiembre 23, 2018, 12:12:27 am »
Hola gracias por la ayuda
Este el código que tengo echo
Código: [Seleccionar]
///Ataques
if global.room_atack=true{ // si el juego esta en modo combate
if global.tipe1.fth=1{ // es la variable que verifica que sea el turno de atacar del  jugador
if keyboard_check_pressed(vk_space) {
//atk=1
 
    if point_distance(x, y, obj_selec_eni.x, obj_selec_eni.y) > 12 // si la distancia al enemigo seleccionado es mayor que
   {
   move_towards_point(obj_selec_eni.x, obj_selec_eni.y, 3); // se mueve hasta el enemigo
  tx=tx1 // cambio de sprite
   }     // tx es para hacer cambio de sprite

}

if point_distance(x, y, obj_selec_eni.x, obj_selec_eni.y)< 12 {  //si la distancia al enemigo es menor que
tx=tx6
speed=0
if  image_index > spr_number - 1 {image_speed=0 }
if instance_exists(obj_adv){ go=1}
else
{go=0}
a+=1
if a>50 and a<70 audio_play_sound(sound0, 10, false); //play sound
if a>100 a=0

if a>50 and a<70 {  // si a esta entre los valores se puede atacar
if go=1 {
if keyboard_check_pressed(vk_space)  n+=1 //n en un contador aumenta en 1 dependiendo del valor el ataque es diferente
}
instance_create(x,y,obj_adv) // el odjeto creaa un aviso en pantalla para indicar que se puede atacar mientras el sonido se reproduce

}
else
with (obj_adv)
{
instance_destroy();
}


// dependiendo del valor de n cambia de sprites para hacer un ataque diferente
if n=1 tx=tx7
if n=2{ tx=tx8 }
if n=2 and image_speed=0 {atk=0 }
if n=3 {atk=0 } //Cuanta n sea igual a 3  se terminan los ataques



if keyboard_check_pressed(vk_space) and go=0 atk=0 // se presionas space  antes de tiempo
                                                    //cuando el sonido no se esta reproduciendo
                                                    //se termina la oportunidad de atacar
}



}

// cuando atk es igual a 0 el personaje vuelve a su pocision original
if  atk=0 {
if point_distance(x, y, object33.x, object33.y) > 12 {
tx=tx2
move_towards_point(object33.x, object33.y, 3);
}
else
{
speed=0 //cuando llega a su pocision original
tx=tx6  //las variables toman su valor inicial
n=0
a=0
atk=1
global.place=1
}
}

No se si se le entienda bien lo que ase, el código funciona bien pero quiero mejorar la forma de hacerlo por ejemplo quiero que calcule que tan rápido presione la tecla cuando se
reproduce el sonido y dependiendo de eso aumenta o disminuya la cantidad de daño echo al enemigo
 
Los siguientes usuarios dieron las gracias a este tema: Yuzo

Desconectado HKaichim

Re:Rpg estilo South Park
« Respuesta #7 en: Septiembre 23, 2018, 01:44:48 am »
Hola gracias por la ayuda
Este el código que tengo echo
Código: [Seleccionar]
///Ataques
if global.room_atack=true{ // si el juego esta en modo combate
if global.tipe1.fth=1{ // es la variable que verifica que sea el turno de atacar del  jugador
if keyboard_check_pressed(vk_space) {
//atk=1
 
    if point_distance(x, y, obj_selec_eni.x, obj_selec_eni.y) > 12 // si la distancia al enemigo seleccionado es mayor que
   {
   move_towards_point(obj_selec_eni.x, obj_selec_eni.y, 3); // se mueve hasta el enemigo
  tx=tx1 // cambio de sprite
   }     // tx es para hacer cambio de sprite

}

if point_distance(x, y, obj_selec_eni.x, obj_selec_eni.y)< 12 {  //si la distancia al enemigo es menor que
tx=tx6
speed=0
if  image_index > spr_number - 1 {image_speed=0 }
if instance_exists(obj_adv){ go=1}
else
{go=0}
a+=1
if a>50 and a<70 audio_play_sound(sound0, 10, false); //play sound
if a>100 a=0

if a>50 and a<70 {  // si a esta entre los valores se puede atacar
if go=1 {
if keyboard_check_pressed(vk_space)  n+=1 //n en un contador aumenta en 1 dependiendo del valor el ataque es diferente
}
instance_create(x,y,obj_adv) // el odjeto creaa un aviso en pantalla para indicar que se puede atacar mientras el sonido se reproduce

}
else
with (obj_adv)
{
instance_destroy();
}


// dependiendo del valor de n cambia de sprites para hacer un ataque diferente
if n=1 tx=tx7
if n=2{ tx=tx8 }
if n=2 and image_speed=0 {atk=0 }
if n=3 {atk=0 } //Cuanta n sea igual a 3  se terminan los ataques



if keyboard_check_pressed(vk_space) and go=0 atk=0 // se presionas space  antes de tiempo
                                                    //cuando el sonido no se esta reproduciendo
                                                    //se termina la oportunidad de atacar
}



}

// cuando atk es igual a 0 el personaje vuelve a su pocision original
if  atk=0 {
if point_distance(x, y, object33.x, object33.y) > 12 {
tx=tx2
move_towards_point(object33.x, object33.y, 3);
}
else
{
speed=0 //cuando llega a su pocision original
tx=tx6  //las variables toman su valor inicial
n=0
a=0
atk=1
global.place=1
}
}

No se si se le entienda bien lo que ase, el código funciona bien pero quiero mejorar la forma de hacerlo por ejemplo quiero que calcule que tan rápido presione la tecla cuando se
reproduce el sonido y dependiendo de eso aumenta o disminuya la cantidad de daño echo al enemigo
La verdad yo no le entiendo muy bien a las variables ni scripts, pero probandolo quizas lo termine entendiendo
 
Los siguientes usuarios dieron las gracias a este tema: Yuzo

Desconectado BssString

Re:Rpg estilo South Park
« Respuesta #8 en: Septiembre 23, 2018, 05:20:15 am »
Hola Ares074

Yo veo tu código bien, no encuentro que hayas usado muchas variables, en realidad cada variable controla algo diferente así que has usado la cantidad justa.

Lo que sí haría sería unas correcciones menores:
Código: [Seleccionar]
//Cambiaría esta línea:
if a>50 and a<70 audio_play_sound(sound0, 10, false); //play sound
//Por esta línea:
if a>50 and a<70 and !audio_is_playing(sound0) audio_play_sound(sound0, 10, false); //play sound
La función "audio_is_playing" (con el signo de negación "!" adelante) revisa si el sonido NO está sonando antes de reproducirlo, así evitas que se escuche el mismo sonido en cada STEP mientras "a" va de 50 a 70, si tu sonido dura mucho, el jugador podría percibir un ruido molesto y repetitivo.

Código: [Seleccionar]
//También cambiaría esta línea:
instance_create(x,y,obj_adv) // el odjeto creaa un aviso en pantalla para indicar que se puede atacar mientras el sonido se reproduce
//Por esta línea
if !instance_exists(obj_adv) instance_create(x,y,obj_adv) // el odjeto creaa un aviso en pantalla para indicar que se puede atacar mientras el sonido se reproduce
Más de lo mismo, mientras "a" va de 50 a 70, estás creando un objeto "obj_adv" en cada step, terminas creando 20 en el mismo segundo. Lo bueno es que cuando "a" toma valor 71, los eliminas todos (los 20), así que probablemente no te hayas dado cuenta.

Por lo demás encuentro que tu código está bien, y es mejor si dices que el código cumple su objetivo.

Saludos
 
Los siguientes usuarios dieron las gracias a este tema: Yuzo, Ares074

Desconectado Ares074

Re:Rpg estilo South Park
« Respuesta #9 en: Septiembre 24, 2018, 07:01:18 am »
Hola BssString

Gracias por las correcciones el tema del audio si se escuchaba algo repetitivo pero ya lo solucione con tu código
el objeto adv tiene el código que si es mayor que uno se elimine

Tienes razón mientras el código haga lo que tiene que hacer esta bien,solo pensaba que estaba utilizando muchas lineas de código para solo hacer un ataque,como va hacer un RPG
pienso hacer distintos tipos de ataques


 
Los siguientes usuarios dieron las gracias a este tema: Yuzo