Febrero 08, 2018, 09:41:27 AM Ultima modificación: Febrero 08, 2018, 08:15:59 PM por Yuzo
Hola.

Estoy con un boss y estoy pensando en como programar lo siguiente:

Tiene un punto concreto donde si le das le restas vida, el caso es que tambien tiene unos brazos con los que puede que se cubra o no.

Las balas del jugador, algunas se eliminan al tocar algo y otras no, depende de la fuerza de la misma.

Lo que quiero es que el objeto estomago (punto donde le haces daño) detecte si la bala (con un with, por ejemplo) esta colisionando con el brazo, si es asi, no le restara vida, de lo contrario, si.

Vamos, lo que no se es como detectar una colision a partir de codigo, ya que siempre lo he hecho como evento.

Gracias.

P.D. tambien habia pensado en crear una varibale de "cubriendose" y que si es true no le quite vida y ya esta, pero por la naturaleza de otros eventos y funciones del gameplay, esto se ha de descartar como opcion, que a priori era la mas sencilla que se me ocurrio.

Hola bueno yo pienso q deberias poner objetos transparentes y persigan al boss y usas distance y unas var para identificar la fuerza de la bala. O algo asi

Gracias, pero creo que no tiene nada que ver con lo que queria preguntar, es que cuando hablo me voy demasiado por las ramas, jejeje.

La pregunta es, puede un objeto detectar si esta colisionando con otro objeto concreto mediante codigo ?.

Cita de: Yuzo en Febrero 08, 2018, 01:11:06 PM
Gracias, pero creo que no tiene nada que ver con lo que queria preguntar, es que cuando hablo me voy demasiado por las ramas, jejeje.

La pregunta es, puede un objeto detectar si esta colisionando con otro objeto concreto mediante codigo ?.

Se me ocurre que podrias usar la funcion "collision_point" que tiene el argumento "obj" para concretar colision.
Podria ser algo asi: (No lo he probado)

if collision_point(1, 2, 3, 4, 5)
   {
   Vida -= 10;
   }

Donde:
1 - Es la coordenada x del punto a verificar
2 - Es la coordenada y del punto a verificar
3 - Es el objeto para verificar, por ejemplo, las colisiones de los brazos
4 - Es si la verificación se basa en colisiones de píxeles perfectos (true = lento) o su cuadro delimitador en general (false = rápido).
5 - Es si la instancia de llamada, si corresponde, debe excluirse (verdadero) o no (falso).

Te quedaria algo asi:
if collision_point(x, y, obj_Brazos, false, true)
   {
   Vida -= 10;
   }

Supongo que de esa manera detectas que si la bala colisiona con brazo le resta 10 puntos de vida y en caso contrario no haria nada, y si ya tienes el evento en bala de que al colisionar desaparezca o se destruya pues el codigo quedaria simple.

Ya me contaras si te sirve o no.

Antes de postear, como siempre, estuve ojeando la ayuda y vi lo que mencionas, pero no lo entendí muy bien.

trastearé un poco y te cuento ;-)

Podrias hacer distintas cajas de colision en el mismo objeto con collision_rectangle y collision_circle

#6 Febrero 08, 2018, 08:04:09 PM Ultima modificación: Febrero 08, 2018, 08:06:34 PM por Yuzo
heeemmm.... si bueno, eso esta bien, pero ya te digo que lo que y quería saber es si hay una manera de decir mediante código algo así como: " SI COLISIONAS CON ESTE OBJETO, PASA ESTO".

No se, algo así como:

[gml]
if colisionando con obj_brazo{
no pasa nada
}else{
vida -= 10
}[/gml]

Existe algo que haga lo que yo he expresado como "colisionando", es lo único que necesito. ( lo de "no pasa nada", obviamente no va a funcionar, es por poner un ejemplo).

De todos modos mil gracias chicos por vuestra ayuda ;-).

#7 Febrero 08, 2018, 08:09:12 PM Ultima modificación: Febrero 08, 2018, 08:11:59 PM por Francos
Publicado por: 3dgeminis
Podrias hacer distintas cajas de colision en el mismo objeto con collision_rectangle y collision_circle

asi es eso es lo que trataba de decir esque pienso que el boss por ser un solo sprite o un solo objeto al momento de detectar la posicion o la collicion que es casi lo mismo pues  al momento de que el boss se tape la panza o lo quesea con los brazos como es la misma imagen pues collisionara o detectara la collision con el mismo objeto y no tendra caso sera lo mismo que si collisionara normal vajaria vida o no en el mismo objeto...

heeemmm.... si bueno, eso esta bien, pero ya te digo que lo que y quería saber es si hay una manera de decir mediante código algo así como: " SI COLISIONAS CON ESTE OBJETO, PASA ESTO".

No se, algo así como:

if colisionando con obj_brazo{
no pasa nada
}else{
vida -= 10
}

Existe algo que haga lo que yo he expresado como "colisionando", es lo único que necesito. ( lo de "no pasa nada", obviamente no va a funcionar, es por poner un ejemplo).

De todos modos mil gracias chicos por vuestra ayuda ;-).
a ok si la hay pero la verdad no e entendido como se usa  es

ev_collision() esta funcion es para eso mas no la e aprendido a usar .

Coño, vale, ya entiendo lo que queríais decir, perdonadme, es que cada día que pasa soy un poco más tonto.

Trastearé con ello, muchísimas gracias chicos, lo doy por solucionado, cuando el trabajo, la casa y la pareja me lo permitan me meto con ello ;-).

Cita de: Francos en Febrero 08, 2018, 08:09:12 PM

ev_collision() esta funcion es para eso mas no la e aprendido a usar .

Anda, pues no lo sabía, mirare cosillas también, gracias !!!

Una cosa mas, si todo eso no consigues hacerlo funcionar se me ocurre otra opcion que quizas no es la mejor pero puede salvarte de mucho y es mas facil de hacer que todo lo anterior.

La idea es que tu "boss" estuviera en dos sprites el modo "normal" y modo "brazos" y entonces al cambiar al sprite "brazos" pues seria tan simple como que ese sprite no tuviera nada de programacion con lo cual por mucho que le peges no afectaria a la "vida" del sprite normal, y viceversa con el otro sprite normal lo programas como tu boss original con su daño y todo eso.

Eso seria una manera "chapuza" por llamarlo asi pero que yo en algunos momentos puntuados me han salvado de comidas de cabeza.

Saludos