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

Un modo sencillo sería:
[gml]
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;
[/gml]

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.

Cita de: brunoxzx en Junio 28, 2017, 01:20:07 AM
Un modo sencillo sería:
[gml]
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;
[/gml]
PCNONOGames  www.pcnono.es

#3 Junio 28, 2017, 08:32:19 PM Ultima modificación: Junio 28, 2017, 08:36:40 PM por Alesxanderk
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:


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.

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.

Cita de: Alesxanderk 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:


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.

Haz que la luz de la linterna sea un objeto (pegado al player).