Noticias

¡Ayuda a la Comunidad GM, haz una donación!

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: COLISION CON SPRITE  (Leído 452 veces)

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

Desconectado nonoroman

en: Junio 27, 2017, 09:12:48 pm
Buenas familia, otra vez ando por aqui.

Ahora traigo una duda, seguro que algunos sabreis como resolverlo.

El caso es que con un objecto, en el draw, dibujo un sprite_LINTERNA en concreto, con draw_sprite (etc,etc,)

La cuestion es la siguiente.

Con otro objecto_enemigo, podria comprobar la colision con el sprite_LINTERNA??? cuando este realmente no existe como objecto, ya que es el objecto_PLAYER el que lo dibuja desde el Draw????

No se si me he explicado, jejejeje.

Espero vuestros consejo, please. Saludos a todos!!!!  ;)

PCNONOGames  www.pcnono.es
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado brunoxzx

Respuesta #1 en: Junio 28, 2017, 01:20:07 am
Un modo sencillo sería:
var s=objecto_PLAYER.sprite_index;
objecto_PLAYER.sprite_index=sprite_LINTERNA;
if ( place_meeting(x, y, objecto_PLAYER ) ){
    //Evento Colision:
}
objecto_PLAYER.sprite_index=s;

 


Desconectado nonoroman

Respuesta #2 en: Junio 28, 2017, 03:13:00 pm
Gracias brunos por responder.

Pero no es exactamente eso lo que necesito. No se si me he explicado mal.

El objecto player tiene su propio sprite. E indeoendientemente este dibuja otro sprite a parte del suyo propio, que es el de la linterna.

Entonces, como comprueba el enemigo si colisiona con el sprite linterna. (Que repito, no es el sprite del player, sino que el player dibuja este sprite en su draw independientemente del suyo)

Espero haberme explicado mejor ahora.

Saludos.

Un modo sencillo sería:
var s=objecto_PLAYER.sprite_index;
objecto_PLAYER.sprite_index=sprite_LINTERNA;
if ( place_meeting(x, y, objecto_PLAYER ) ){
    //Evento Colision:
}
objecto_PLAYER.sprite_index=s;

PCNONOGames  www.pcnono.es
 


Desconectado Alesxanderk

  • Adicto
  • *
  • Puntos: 324
  • Mensajes: 274
  • Agradecido: 1 veces
  • Sexo: Masculino
  • Señálame la meta y construiré el camino.
    • Ver Perfil
    • Game Dev Project
Respuesta #3 en: Junio 28, 2017, 08:32:19 pm
El obj_personaje necesita tener dos variables nuevas:

"pos_lin_x" y "pos_lin_y"; esto para que los enemigos puedan saber exactamente donde esta el origen de la luz.

el obj_enemigo para detectar la colisión necesita un código como este:

Código: [Seleccionar]
Colision = noone;
Colision = point_in_circle(x, y, obj_personaje.pos_lin_x, obj_personaje.pos_lin_y, 16);

if Colision != noone{
//Lo que tenga que hacer en caso de colisión
}

Nota 1: El código es más ilustrativo que funcional, debes de acomodarlo a tus necesidades.
Nota 2: Use "point_in_circle" como un ejemplo, si el sprite linterna tiene forma triangular usa "point_in_rectangle". haz los cálculos necesarios para que coincida con la forma y tamaño del sprite de la linterna.
« última modificación: Junio 28, 2017, 08:36:40 pm por Alesxanderk »

 


Desconectado brunoxzx

Respuesta #4 en: Junio 29, 2017, 02:53:55 am
El código que puse debe ir en el step de los enemigos no del jugador y solo funcionará si la linterna se dibuja en la posición (x,y) del personaje, de otro modo debes modificarlo ligeramente.

El obj_personaje necesita tener dos variables nuevas:

"pos_lin_x" y "pos_lin_y"; esto para que los enemigos puedan saber exactamente donde esta el origen de la luz.

el obj_enemigo para detectar la colisión necesita un código como este:

Código: [Seleccionar]
Colision = noone;
Colision = point_in_circle(x, y, obj_personaje.pos_lin_x, obj_personaje.pos_lin_y, 16);

if Colision != noone{
//Lo que tenga que hacer en caso de colisión
}

Nota 1: El código es más ilustrativo que funcional, debes de acomodarlo a tus necesidades.
Nota 2: Use "point_in_circle" como un ejemplo, si el sprite linterna tiene forma triangular usa "point_in_rectangle". haz los cálculos necesarios para que coincida con la forma y tamaño del sprite de la linterna.
Esto no funcionará, revisará si hay colisión (en un solo punto) con un circulo en donde se encuentra la linterna y nonoroman no mencionó que el sprite de la linterna fuera circular, tampoco que mide 16 pixeles.

 


Desconectado Clamud

Respuesta #5 en: Julio 11, 2017, 04:33:18 pm
Haz que la luz de la linterna sea un objeto (pegado al player).