Hola, estuve intentando en hacer que mi personaje golpee con una espada, he logrado buenos avances... pero no me ha salido bien.
Los ejemplos que encontre son de zelda solamente, el mio es de plataforma.
Lo que tengo realizado hasta el momento, es un sprite del personaje con la espada, con movimiento, y otro sprite del mismo movimiento de la espada pero sola, como mascara, para que agregada en las mismas coordenadas se animen en simultaneo, y de esta manera, solo la espada sea la que ejersa el evento de colision (la espada en mask).
mi idea es hacer que cuando el personaje "espadee", lo haga quedandose quieto, que no se pueda deslizar durante la accion. pero que tambien pueda "espadear" cuando salte, sin frenar el impulso.
muchas gracias.
Tambien lo puedes hacer en movimiento, simplemente crea otro objeto de espada con la
sprite de mascara como dijiste y en el evento step le das a igualar el X, Y, Hspeed y Vspeed del personaje
o Direction y Speed, segun c?mo lo hayas hecho
Texic..., aqui tambien :-[ ... si puedes mostrame, de forma escrita como seria que quedaria, en scrips o en D&D :-[
sencioo:) mira
evento pressionar tecla del personaje:
instance_create(x,y,objespadazo)
evento step del objeto objespadazo:
x=personajeobj.x
y=personajeobj.y
y para optimizarlo, podrias crear una variable de direccion o checar el sprite asi:
if personajeobj.sprite_index=personajeizquierda{sprite_index=espadazoizq}
if personajeobj.sprite_index=personajederecha{sprite_index=espadazoder}
o mejor aun, si aprendes a usar la funcion image_xscale=-1 te ahorrarias muchos sprites ;) saludos
mmm... mira, te muestro como es el metodo que estoy usando actualmente para mi personaje principal.
Information about object: heroe
Sprite: quieto_der
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: sprite12
Create Event:
execute code:
image_speed = 0.5
right = true
jumpcontrol = false
jump = false
Alarm Event for alarm 0:
execute code:
jumpcontrol = false
Step Event:
execute code:
gravity_direction = 270;
if place_free(x,y+1)
{
gravity = 1.0;
}
else
{
gravity = 0;
}
if (vspeed > 12) vspeed = 12;
execute code:
if keyboard_check(vk_up) and jumpcontrol = true
{
vspeed -= 3.8
}
End Step Event:
execute code:
if right = true and vspeed < 0
{
sprite_index = salto_der;
}
else if right = false and vspeed < 0
{
sprite_index = salto_izq;
}
execute code:
if right = true and vspeed = 0 and jump = true
{
sprite_index = salto_der;
}
else if right = false and vspeed = 0 and jump = true
{
sprite_index = salto_izq;
}
execute code:
if right == true and vspeed > 0
{
sprite_index = salto_der
}
else if right == false and vspeed > 0
{
sprite_index = salto_izq
}
Collision Event with object object3:
execute code:
if other.y > self.y
{
if (vspeed > 0 && not place_free(x,y+vspeed)) move_contact(270);
vspeed = 0;
jump = false
}
else
{
if (vspeed > 0 && not place_free(x,y+vspeed)) move_contact(270);
vspeed = 0;
}
Keyboard Event for <no key> Key:
execute code:
if right = true
{
sprite_index=quieto_der
}
else
{
sprite_index=quieto_izq
}
Keyboard Event for <space> Key: // con esta tecla quiero que "espadee"
Keyboard Event for <Left> Key:
execute code:
sprite_index = corre_izq
right = false
{
if place_free(x-4.5,y) x -= 4.5;
}
Keyboard Event for <Right> Key:
execute code:
sprite_index = corre_der
right = true
{
if place_free(x+4.5,y) x += 4.5;
}
Other Event: Outside Room:
execute code:
next_room(global.izquierda,global.derecha,global.arriba,global.abajo)
Key Press Event for <Up> Key:
execute code:
if (not place_free(x,y+1))
{
jumpcontrol = true
alarm[0] = 4
jump = true
}
... es el mejor engine de plataforma que pude encontrar y modificar a mi gusto..., pero la parte de "espadear"... no logro proyectarla bien... :'( lo intente pero me saltan errores. principalmente cuan quiero lograr que espadee saltando (usando es mismo sprite de golpe en el suelo) y veo como la mascara (la espada sola) queda retrasada en el aire. ?_?
en vez de gravedad usa vspeed, quedaria asi
if place_free(x,y+1)
{
vspeed+=1;
}
else
{
vspeed=0;
}
y en el step de la espada s?lo esto
x=personaje.x
y=personaje.y
(no es necesario, pero para m?s precision)
vspeed=personaje.vspeed
hspeed=personaje.hspeed
y
Keyboard Event for <no key> Key:
execute code:
if right = true
{
sprite_index=quieto_der
}
else
{
sprite_index=quieto_izq
}
No lo pongas ahi, ponlo en step y checkeando que todas las teclas que usas (arriba, abajo, etc)
no esten presionadas (con keyboard_check(vk_up) o la tecla que quieras checkear, te dara 0
cuando no esta presionada y 1 si lo esta)
Espero que te sirva
PD: Deberias usar el GM8 asi te puedo ayudar mejor ;)
cuando marcas el step de la espada... (sprite de la mask de la espada sola, o el personaje golpeando?)
x=personaje.x
y=personaje.y
(no es necesario, pero para m?s precision)
vspeed=personaje.vspeed
hspeed=personaje.hspeed
... "personaje"... te refieres al sprite de personaje comun, o el personaje golpeando...?
... ah... y como involucro la mask de la espada... o sea... mmm
va... en objetos, tengo:
HEROE
HEROE GOLPEANDO
ESPADA (mascara)
... perdon jajaja... ya me marieeee.. jajaja... igual sigo intentando con esto que me has pasado... :-[
Personaje es el objeto del personaje comun, ninguna sprite
El mask de la espada es el de la espada sola.
Lo que hiciste esta mal, el heroe debe tener un solo objeto y cambiar de sprite al golpear.
En el evento animation end le das que si las sprite del heroe es la de golpeando entonces
cambia a la sprite comun.. Es dificil explicar a ciegas, porque no me pasas tu proyecto y te
ayudo con eso? (No te lo voy a robar, tengo mis propios asuntos ;))