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: collision objet  (Leído 837 veces)

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

Desconectado Francos

en: Septiembre 01, 2018, 12:20:54 am
 :) hola comu que tal,
ya tenia rato que no me pasaba,
alguien me podria ayudar,
el problema es que tengo una base enemiga que crea al enemigo1 durante cierto tiempo
 bueno total se hacen varias instancias del mismo enemigo la cosa es que las instancias al collisionar se traban es decir que
cuando el enemigo1(instancia 1) enemigo1(instancia2) collisionas se supone que deverian decambiar de direccion de hecho lo hace pero llega un momento como que se cuatrapea y se quedan trabadas ambas instancias.

1 forma de resolverlo nose que a cierta distancia cambie de direccion pero que no cambie justo cuando esta la instancia pegada para que no se traben o algo asi no se si me explique.

la cosa es que me funciona muy bien al dejar los enemigos con la opcion de solidos desactivada pero se miran muy juntos
y no megusta, luego activo la casilla solidos y todo bien  asta que luego  de un tiempo se traban

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado BssString

Respuesta #1 en: Septiembre 01, 2018, 12:31:01 am
Hola Francos
Lo más sencillo que se me ocurre es que cuando ambos enemigo1 colisionen entre ellos, tomen la dirección opuesta.

En el evento colisión del enemigo1 con el enemigo1 pone:
Si tu juego se ve desde arriba
Código: [Seleccionar]
direction = point_direction(other.x,other.y,x,y) //Calcula la dirección desde el otro objeto hasta mi. Si usas tu propia variable de dirección, pones tu variable en vez de "direction"
speed = velocidad //Setea mi velocidad (no es 100% necesaria esta línea, en teoría la velocidad debería estar seteada de antes)
Si tu juego se ve de lado
Código: [Seleccionar]
hspeed = (velocidad)*sign(x-other.x) //Si usas tu propia variable de velocidad, usa esa en vez de "hspeed"
Saludos

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


Desconectado Clamud

Respuesta #2 en: Septiembre 01, 2018, 05:42:59 am
Utiliza una variable que indique si está colisionando y una alarma
// Create
colisionando = false;

// Step
if place_meeting(obj_enemigo) and (not colisionado)
{
  colisionando = true;
  alarm[0] = 1;
  // ... codigo para reaccionar a la colision ...
}

// Alarm 0
colisionando = false;

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


Desconectado Francos

Respuesta #3 en: Septiembre 01, 2018, 03:48:52 pm
gracias usare ambas para ver cual me sirve , hola gracias por la ayuda pero no logre que funcionara no se si haya otra forma
clamud intente el code que me diste y funciono un poco segui buscando y nada pero nose si por ejemplo mires el code

code:
si evento collicion con enemigo1
speed=0
direction=el contrario de la velocidad del enemigo con todo y su imagen en direccion a la velocidad todo bien
pero lo que no me gusta es que se traban los monos quedan trabados
y con
place_meeting funciona pero luego tambien se traba
 uso un mask que es igual para los enemigos  no se si se pueda collisionar con el mask enves de las imagenes o algo asi

tengo un enemigo principal que no hace nada simplemente cambia al enemigo que hace todas las funciones el otro es como una salida de enemigo creo que este cuando cambia al que hace las funciones al juntarce con otra instancia se traba

nose tambian abra algo como para verificar que antes del cambio de imagen no este otro objeto sobre el o algo asi saludos  y gracias
« última modificación: Septiembre 20, 2018, 02:18:41 am por Francos »

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Francos

Respuesta #4 en: Septiembre 20, 2018, 02:20:18 am
hola gracias por la ayuda pero alguna otra idea

 


Desconectado n0k

Respuesta #5 en: Septiembre 20, 2018, 11:51:41 am
Saludos,

Otra opción podría ser que compares la distancia x,y de ambos objetos (enemigos) y que al llegar a cierta distancia entre ellos se den la vuelta sin llegar a tocarse siquiera.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Francos

Respuesta #6 en: Septiembre 20, 2018, 06:00:41 pm
haber deja intento :)

 


Desconectado Francos

Respuesta #7 en: Septiembre 20, 2018, 11:04:29 pm
hola clamud y nod
intente esto que me funciona  pero no entiendo muy bien su funcion
me pueden explicar mas omenos como es

ley que esta variable es como para verificar
! que significa mas omenos asi  como el else con diferencia que este se puede cumplir al principio de la funcion


mi codigo es variables on1=0 //collicionando    on1=1 //no collision

if !place_meeting(x,y,Pasarela_1) // lo de la pasarela es como un block negro que evita que el personaje enemigo cambie  a su enemigo principal el que hace todas las funciones
{on1=0} // este es para decir bueno estas colicionando como dice clamud no vas a cambiar
else
{on1=1}// bueno ya pasaste la collicion con pasarela entonces create la alarma cambio
if on1=1{alarm[0]=2} //este cambia al personaje que quiero que aga todas las funciones que es el enemigo

todo sale bien pero lo que no entiendo es ! esto en  esto place_meeting  lo entiendo pero muy cerradamente

por ejemplo la pasarela latengo para que los enemigos que ya son principales no collicionesn con el enemigo que acaba de salir y se trabe al cambiar al personaje principal que quiero decir es que la pasarela es un cuadro mas grande que el personaje que hace que los enemigos collicionen con el cuadro negro antes que el enemigo que ba a cambiar pero si pongo la pasarela solido se traba el enemigo que acaba de salir si lo pongo no solido no se traba pero que hace exactamente esta funcion segun verifica si hay un solido  y si no lohay se cumple la funcion o como enque me perdi yo lo explico como lo entiendo para que me corrijan porque no me queda claro lode solido y no solido con !place_meeting() gracias

 


Desconectado Clamud

Respuesta #8 en: Septiembre 22, 2018, 05:07:33 am
¿Utilizas el evento Collision?, tal vez por eso hay un cambio al activar la variable solid.

El símbolo ! significa negación. La función place_meeting devuelve true o false, es decir, está tocando o no está tocando.
Cuando se escribe esto !place_meeting, se invierte la lógica, true se vuelve false y false se vuelve true.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado Francos

Respuesta #9 en: Septiembre 27, 2018, 01:30:37 am
no no me a quedado y ya e intentado vastante ademas tengo un mas para todo los objetos y nada se traban asta puse cuando colliciona cambie de direccion pero aun asi se traba  alguna otra idea

 


Desconectado BssString

Respuesta #10 en: Septiembre 27, 2018, 03:40:44 am
Quítale el check de sólido

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo


Desconectado n0k

Respuesta #11 en: Septiembre 27, 2018, 12:27:14 pm
mh... tienes dos sólidos, enemigo 1 y enemigo 2.

Lo más lógico es que entre ellos no se choquen, como por ejemplo en yoshi island, hay un tubo por donde suben enemigos y entre ellos no se chocan, pero son sólidos. Eso sería lo mejor, si ya quieres que se estorben.

Pero si quieres que se estorben o choquen sin quedarse pillados, en lugar de place_meeting, prueba comparando sus mask... o al realizar place_meeting que cambie su hsp al contrario de donde se choca.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo