Hola a todos,
vengo acá con una pregunta que me quiebra la cabeza, de antemano gracias por su atención.
¿como puedo comprobar una colisión con una sola imagen de un sprite animado?
me explico:
tengo un sprite que representa un enemigo con espada, este sprite se conforma de 5 imágenes de las cuales, solo la numero 3 esta con la espada en posición de ataque.
quiero que cuando se detecte una colisión entre el player y el image index numero 3 del sprite, se pueda realizar una acción en especifico.
estoy trabajando algo así:
1. duplique el sprite de enemigo atacando y edite las imágenes borrando todo excepto la imagen numero 3(donde esta el golpe), OJO, mantuve la cantidad de imágenes, es decir que siguen siendo 5, solo que en la numero 1, 2, 4 y 5 no hay ningún dibujo.
2. configure la mascara como precisa para que únicamente marque el contorno de la figura del dibujo numero 3 dando el golpe de espada.
3. estoy utilizando el siguiente código en un evento STEP:
sprite_index=enemigo_atacando;
mask_index=mascara_imagen_duplicada; (la que solo tiene dibujo en la imagen numero 3)
image_speed=1;
if(instance_position(x, y, objeto_player) and (objeto_enemigo.mask_index=mascara_imagen_duplicada))
{ detectar colision }
espero haberme explicado, si se requiere mayor detalle agradezco me lo indiquen.
nuevamente gracias y saludos.
Hola, gusto en saludarle.
Te ofrezco dos soluciones:
1. Si lo que quieres es que el enemigo cambie de máscara cuando la imagen de su sprite tenga la espada puedes usar el siguiente código donde hay dos sprites el del enemigo: enemigo sin atacar (sprite_tranquilo) y el del enemigo atacando (sprite_espada).
mask_index=sprite_tranquilo
if(image_index=3){mask_index=sprite_espada}
2. Si el enemigo no hace daño cuando no tiene su espada entonces: lo que quieres es que se detecte colisión solamente cuando el enemigo ataque y no cuando esté tranquilo. Donde objeto_enemigo es el objeto enemigo y La variable vida contiene las vidas del player.
Para el objeto enemigo
EVENTO STEP
ataque=0
if(image_index=3){ataque=1}
Para el objeto player
EVENTO STEP
if(instance_exists(objeto_enemigo))
{
if(place_meeting(x,y,objeto_enemigo))
{
id_enemigo=instance_nearest(x,y,objeto_enemigo)
if(id_enemigo.ataque){vida-=1}
}
}
:) :)
amigo, es usted muy amable, agradezco la ayuda, de hecho me dio toda la idea para conseguir hacer lo que necesito.
pongo aquí lo que me funcionó por si puede ayudar a alguien mas, seguro que hay forma de optimizarlo y puede simplificarse, sin embargo funciona y puede sacar de algún problema.
en evento STEP:
sprite_index=enemigo_atacando;
if((image_index==3) and (instance_place(x, y, obj_player)))
{
acciones.....
}
así checa y detecta la colisión justo en el momento que llega a la tercera imagen que es donde tiene la espada extendida.
saludos y éxitos.