Mayo 08, 2015, 03:35:11 PM Ultima modificación: Mayo 12, 2015, 11:41:03 PM por WolfIng Entertainment
Edito.:

quiero que cuando se creen los enemigos y lleguen a mi posición que no se solapen unos con otros, es decir, que hagan colisión entre ellos y para llegar hasta mi tengan que intentar rodearme o algo así.... :-[ :-[no se si me han entendido... xD.
Resumiendo:
Quiero hacer como un check_collision con todos los enemigos, incluso con el mismo tipo de enemigo. Viendo que no puedo solucionar el problema, os dejo el editable del juego a ver si mirando el juego podeis ver mas claro el fallo.

#1 Mayo 08, 2015, 09:01:20 PM Ultima modificación: Mayo 08, 2015, 09:05:10 PM por damyrodriiguez
HOLA AMIGO !!! TENGO LA SOLUCION..

Mira yo tengo un juego top down, de zombies en el cual uso ese tipo de codigos que tu quieres.. aqui te lo planteo. Este codigo teservíra para que los enemigos se colisionen entre ellos y se esquiven tambien..

hagamos el ejemplo de que lo estoy creando yo para guiarte..

Creo un objeto llamado: obj_player
Creo un objeto llamado: obj_zombies... bueno

ve a "step event" en obj_zombies y abre un "execute code" escribe lo siguiente.

if distance_to_object(obj_player) <= 256
{
      if distance_to_object(obj_player) <= 16 {speed=0}
   mp_potential_step(obj_player.x,obj_player.y,4,all)

      if distance_to_object(obj_zombies) < 16
      mp potential_step(x,y,4,all)
      if distance_to_object(obj_player) <= 16 {speed=0}
}

LISTO..obviamente tu pon el nombre de tu jugador segun como lo hayas escrito, y al del zombie tambien. tu sabes.

bueno, y el numero "4" que encuentras en esta accion "Potential" es la velodidad del enemigo o del objeto que se aserque a ti... pues la diferencia de usar "Pontential" y usar "point_direction" es que... mp_potential_step esquiva todo obstaculo para llegar a ti sin necesidad de mucho codigo, solo poniendo eso ya basta.. y el point_direction no esquiva objetos, va solo en linea recta.. a no ser que hagas mas codigos cosa que aburriria. bueno
espero que te sirva esto. dejame decirte que:

Por Pregunta sobre este tema o otras dudas que tengas, te hago saber que me llamo Luiber Extrenzas en Facebook, AGREGAME! yo aqui te dejo el Link, cuando quieras, a las ordenes (Y)

https://www.facebook.com/profile.php?id=100008220635391

Cita de: damyrodriiguez en Mayo 08, 2015, 09:01:20 PM
HOLA AMIGO !!! TENGO LA SOLUCION..

Mira yo tengo un juego top down, de zombies en el cual uso ese tipo de codigos que tu quieres.. aqui te lo planteo. Este codigo teservíra para que los enemigos se colisionen entre ellos y se esquiven tambien..

hagamos el ejemplo de que lo estoy creando yo para guiarte..

Creo un objeto llamado: obj_player
Creo un objeto llamado: obj_zombies... bueno

ve a "step event" en obj_zombies y abre un "execute code" escribe lo siguiente.

if distance_to_object(obj_player) <= 256
{
      if distance_to_object(obj_player) <= 16 {speed=0}
   mp_potential_step(obj_player.x,obj_player.y,4,all)

      if distance_to_object(obj_zombies) < 16
      mp potential_step(x,y,4,all)
      if distance_to_object(obj_player) <= 16 {speed=0}
}

LISTO..obviamente tu pon el nombre de tu jugador segun como lo hayas escrito, y al del zombie tambien. tu sabes.

bueno, y el numero "4" que encuentras en esta accion "Potential" es la velodidad del enemigo o del objeto que se aserque a ti... pues la diferencia de usar "Pontential" y usar "point_direction" es que... mp_potential_step esquiva todo obstaculo para llegar a ti sin necesidad de mucho codigo, solo poniendo eso ya basta.. y el point_direction no esquiva objetos, va solo en linea recta.. a no ser que hagas mas codigos cosa que aburriria. bueno
espero que te sirva esto. dejame decirte que:

Por Pregunta sobre este tema o otras dudas que tengas, te hago saber que me llamo Luiber Extrenzas en Facebook, AGREGAME! yo aqui te dejo el Link, cuando quieras, a las ordenes (Y)

https://www.facebook.com/profile.php?id=100008220635391

Lástima, hay un fallo pero no consigo encontrarle... me crea los enemigos en el borde de la room pero no se mueven de ahí... no se que pasa...
¿alguna idea de que puede pasar? lo he puesto como me dijiste
Muchas gracias de todas formas  ;)

Ponme el codigo que estas utiliando para que se creen los enemigos, haber como lo hisiste :)

FIJATE EN ESTO, TAL VEZ SEA EL PROBLEMA...

si estas creando los enemigos atravez de Execute code, es problema puede ser esto..

instance_create(x,y,obj_enemigo)

que en la posicion x tienes que agregarle un + y poner en que parte de la pantalla, ir ajustando..

por ejemplo.. instance_create(x+320,y+320,obj_enemigo) para elegir el lugar espesifico, y sino crea todos los enemigos de primera poniendolo tu manualmente, que no pasara ningun error con el codigo que te di, porque si no estas serca de ellos no se activarán, pues puedes ponerlos libremente

Cita de: damyrodriiguez en Mayo 09, 2015, 04:10:09 AM
Ponme el codigo que estas utiliando para que se creen los enemigos, haber como lo hisiste :)

Este es el código, es un sistema por oleadas que compartió un compañero de la comunidad:

var yy,xx,direc;

if (oleada == 0) {
    numOleada += 1;
    oleada = 1;
}
if (instance_number(obj_parent_enemigo_sigue) < numZombies * numOleada) {
    yy = random_range(544,480);
    direc = random_range(0,1);  //Creamos un n�mero aleatorio entre 0 y 1.
    if (direc >= 0.5) { //Si ese n�mero es mayor o igual que 0.5 se crea el objeto de izquierda a derecha
        idObj =  instance_create(0,yy,choose(obj_enemigo1,obj_enemigo2,obj_zombie3,obj_zombie4)); //con idObj tomamos la ID del objeto creado.
        idObj.direccion = 0; //Al objeto recien creado le cambiamos el valor de la variable direccion.
    } else { //Si no se crea de derecha a izquierda.
        idObj = instance_create(room_width,yy,choose(obj_enemigo1,obj_enemigo2,obj_zombie3,obj_zombie4))
        idObj.direccion = 1;
    }
    alarm[0] = 5; 
} else {
    oleada = 0;
}

Sabes porque no se mueven? no será que la oleada casualmente crea mas de 1 objetos sobre el mismo sitio? por el cual se tranca uno con el otro, por estar ensima entre ellos? fijate, tal vez es eso lo que pasa, disparale al enemigo para que cuando ese muera, tal vez el de abajo puedo avanzar, si esto pasa era ese el problema. dime

Cita de: damyrodriiguez en Mayo 09, 2015, 05:15:35 AM
Sabes porque no se mueven? no será que la oleada casualmente crea mas de 1 objetos sobre el mismo sitio? por el cual se tranca uno con el otro, por estar ensima entre ellos? fijate, tal vez es eso lo que pasa, disparale al enemigo para que cuando ese muera, tal vez el de abajo puedo avanzar, si esto pasa era ese el problema. dime

Si, era justo eso, y de vez en cuando me sigue pasando, no solo con las paredes si no con los enemigos también, puede ser por el precise colision? de todas formas ahora anda mucho mejor aunq la velocidad de los enemigos me parece muy rápida aunque se la baje a uno... xD

Me parecia, porque ya me ha pasado jaja sabes repararlo?

pon que al crearse el objeto zombie si esta en collision con el mismo objeto, se elimine y vuelva a crear, hasta que encuentre un lugar, eso el programa lo hace muy rapido y ni lo notas jaja sino elige tu manual mente la posicion asi te evitas estos problemas, eligiendo donde no hay objetos ni nada..

Cita de: damyrodriiguez en Mayo 09, 2015, 06:16:43 AM
Me parecia, porque ya me ha pasado jaja sabes repararlo?

pon que al crearse el objeto zombie si esta en collision con el mismo objeto, se elimine y vuelva a crear, hasta que encuentre un lugar, eso el programa lo hace muy rapido y ni lo notas jaja sino elige tu manual mente la posicion asi te evitas estos problemas, eligiendo donde no hay objetos ni nada..
No, la verdad es que no se como hacer eso, ¿podrías explicarlo?, aunque ahora el fallo no me da cuando se crean tanto como cuando están en pantalla y colisionan unos con otros...

#10 Mayo 09, 2015, 07:13:33 AM Ultima modificación: Mayo 09, 2015, 07:19:13 AM por damyrodriiguez
Prueba con esto haber.. mmm

crea un objeto que se llame: obj_zombie_rel

y ve a event_create: execute code: pon global.zombie_rel = 0

en evento step pon esto: execute code: escribe..

if global.zombie_rel = 0
{}

if global.zombie_rel > 0
{
global.zombie_rel -=1;
Y DEBAJO AQUI PONES LA ACCION QUE CREE A UN ZOMBIE AL AZAR COMO LOS DEMAS.}

/// esto es para que no se pase el limite de variable.
if global.zombie_rel < 0
{global.zombie_rel = 0}

y listo, ponlo en el escenario...

ahora ve al objeto zombie normal osea al enemigo y pon...

en event_create: ve a la lista de comandos de game maker.. "control" y busca la que tiene
una flechita roja que toca con una pared azul... que se llama "Check Collision" ponla y te saldrá una ventanita asi:

x: x
y: y
objects: Only Solid.. la cambias a "ALL"

relative[SI]

y dejabo de esa pones en la misma lista de control una flechita que va a hacia arriba, y luego pones una que va hacia abajo... y en medio de ellas pon un execute code con esto:

global.zombie_rel += 1
instance_destroy();


prueba haber que tal... esto lo que hise fue, que si el objeto al crearse esta sobre otro objeto sea cual sea, pared o enemigo, se elimine y suma el variable +1 para que sepa que hay un enemigo que se elimino por falta de espacio y el variable vuelve a crearlo, pero si vuelve a crearse sobre otro se volverá a eliminar hasta conseguir lugar. es algo simple(: a mi me ha funcionado jaja

Cita de: damyrodriiguez en Mayo 09, 2015, 07:13:33 AM

prueba haber que tal... esto lo que hise fue, que si el objeto al crearse esta sobre otro objeto sea cual sea, pared o enemigo, se elimine y suma el variable +1 para que sepa que hay un enemigo que se elimino por falta de espacio y el variable vuelve a crearlo, pero si vuelve a crearse sobre otro se volverá a eliminar hasta conseguir lugar. es algo simple(: a mi me ha funcionado jaja

Lo siento amigo, o no lo hize bien, o no me funciona, se me siguen quedando solapados además de eso también se me quedan solapados si van andando y chocan unos con otros...

¿Alguien sabe como puedo solucionarlo?
Gracias compañeros!

No puedo aceptar que no puedas, te seguiré ayudando jaja mira, para que no sientas que no puedes.. Te harè un Editable y te lo subirè para que veas los códigos..... Ha y por sierto, para que los enemigos roten en dirección al player, que usas? image angle?

Cita de: damyrodriiguez en Mayo 12, 2015, 09:54:57 AM
No puedo aceptar que no puedas, te seguiré ayudando jaja mira, para que no sientas que no puedes.. Te harè un Editable y te lo subirè para que veas los códigos..... Ha y por sierto, para que los enemigos roten en dirección al player, que usas? image angle?

Bueno amigo, creo que mas o menos ya hacen lo que quería, aun así de vez en cuando se quedan trabados unos con otros pero más o menos lo que me fallaba era que el sistema por oleadas me creaba los enemigos fuera del room o justo en un punto en el que colisionaban con una pared y entonces ya no se movían. con respecto a lo que uso para hacer que giren entorno al jugador uso hspeed y vspeed, aunq estoy abierto a sugerencias jajajajajajja ;D ;D, pero creo q el image angle no me serviría de mucho pues ya tengo cuatro sprites para las direcciones de los enemigos y de momento con el hspeed y vspeed no va mal... (aunq estoy abierto a cambios constructivos... xDD)
como siempre gracias por molestarte en contestar!

POone lo siguiente en el eventoCOLISION con otros enemigos:

empujar = point_direction(x,y,other.x,other.y)
if place_free(x+lengthdir_x(1,empujar),y+lengthdir_y(1,empujar))
{
x = x+lengthdir_x(-1,empujar)
y = y+lengthdir_y(-1,empujar)
}