Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Granja  (Leído 163 veces)

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

Desconectado Marcusmaniacus

en: Febrero 14, 2019, 07:11:52 pm
Tengo un pequeño problema  antes programaba  pero lo deje por motivos de trabajo  :-[
Ahora que e vuelto tengo el pequeño problema de que quiero hacer un pequeño juego de gestión pero no se como hacer que los personajes se priorizen es decir  Pongo 3 Arbustos  y quiero que vallan de forma consecutiva a cada uno pero no se como hacerlo   es decir que primero por uno y después por otro   no comprendo como hacer eso  me podrían ayudar :(

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado BssString

Respuesta #1 en: Febrero 14, 2019, 07:17:11 pm
Hola Marcusmaniacus

Intenta añadir los id a una ds_queue, así puedes encolar acciones, luego vas leyendo el id que sigue para ir al arbusto que sigue.
Para crear una queue usa:
queue = ds_queue_create()
Para meter info:
ds_queue_enqueue(queue,id_del_arbusto)
Para leer info:
prox_arbusto = ds_queue_dequeue(queue)

Saludos

 


Desconectado Marcusmaniacus

Respuesta #2 en: Febrero 14, 2019, 07:29:12 pm
Perdon pero como le puedo añadir id a los arbustos  o como Obtendre la id de los arbustos :V  por que se que tienen una id  por si solos pero no comprendo muy bien como usarla

 


Desconectado BssString

Respuesta #3 en: Febrero 14, 2019, 08:19:41 pm
Hola Marcusmaniacus.

Cada objeto de Game Maker que colocas en una room (ya sea de forma manual en el editor de rooms o mediante el instance create) tiene un ID único que identifica a ese objeto, se puede conocer si llamas a la variable "id".

Tu solución depende de cómo gestionas el clic del mouse, una forma sencilla es la siguiente:

En un objeto control, (supongamos que se llama oControl) creas la queue para que sea única:
Código: [Seleccionar]
queue = ds_queue_create() //Esto crea una cola y guarda la cola en la variable "queue" alojada en el objeto controlEn ese mismo objeto, pero en el game_end, la destruyes para evitar que quede en cache.
Código: [Seleccionar]
ds_queue_destroy(queue)
Ahora la magia, cuando clickeas un objeto arbusto, mediante el evento del mouse button del arbusto, le añades su id a la queue.
Código: [Seleccionar]
ds_queue_enqueue(oControl.queue,id) //Aquí haces referencia a la queue alojada en el objeto oControl
Ahora hay que hacer que el player camine hacia el arbusto.
En el create event del player, le pones una variable que indica el objeto hacia el que está caminando:
Código: [Seleccionar]
target = noone //noone significa que no sigue a ningún objeto
Ahora la magia más mágica, cuando hay algún arbusto en la cola, haces que el player lo detecte en su Step event y camine hacia al arbusto que hayas clickeado. Puedes añadir la condición que desees, estas son las dos condiciones clave:
Código: [Seleccionar]
if !ds_queue_empty(oControl.queue) && target = noone  {
target = ds_queue_dequeue(oControl.queue) //Esto lee el arbusto que sigue en la cola
}
//El seguimiento puede ser cualquier código, aquí va el más sencillo que se me ocurrió:
if target != noone {
var spd = 8 //La velocidad que quieras
if point_distance(x,y,target.x,target.y) < spd { //Si llegaste al arbusto, ajusta tu posición a la posición del arbusto
x = target.x
y = target.y
target = noone
}
else { //Si aún no has llegado, te acerca un paso más
var dir = point_direction(x,y,target.x,target.y)
x += lengthdir_x(spd,dir)
y += lengthdir_y(spd,dir)
}

}

Con eso debería bastar, no he probado el código así que es posible que me haya equivocado en algún paso o el nombre de alguna variable

Saludos Cordiales