Noviembre 10, 2009, 05:44:30 PM Ultima modificación: Noviembre 12, 2009, 05:40:08 PM por jesuan94
Hola, estoy haciendo una especie de juego de plataformas, ya tengo el movimiento del personaje y todo eso, ahora estoy con el ataque.

El personaje ataca con un latigo. (la imagen esta adjunta)

Entonces la mascara de este sprite tiene que tener el tama?o del latigo para que cuando toque el latigo al enemigo este bien colocada la mascara. lo que me pasa es que para eso tengo que cambiar la mascara s?lo cuando el personaje esta atacando (ademas tiene que ser diferente cuando esta atacando a derecha o a izquierda, creo) y no se c?mo hacerlo, lo he intentado de muchas formas pero no soy capaz, a ver si vosotros que sabeis todo sobre el game maker me decis como hacerlo.

Agrego el juego: Dentro estan las mascaras y todo, es para que lo veais y eso.
si quieres jugar a un juego de internet
                              DINOPARC


si alguien entra que me lo diga por Mensaje Privado y le ayudo

Nom... la mascara nunca hay que cambiarla, siempre debe ser la que ocupe todo el personaje (si se agacha entonces si cambia por una mas baja)

lo que debes hacer es que al atacar crees un objeto invisible con el mismo sprite del ataque, pero borrando lo que no le da?a (igual a la animacion del ataque pero  solo dibujando el latigo), y ?STE objeto ser? el que deber? colisionar con el enemigo para restarle vida

#2 Noviembre 10, 2009, 08:01:26 PM Ultima modificación: Noviembre 10, 2009, 08:22:57 PM por jesuan94
pero como hago para que este objeto (latigo) vaya puesto encima del latigo del personaje normal??

EdiTo: ya lo he hecho, buscando un rato lo he encontrado, aunque tendre mas cosas que preguntar
si quieres jugar a un juego de internet
                              DINOPARC


si alguien entra que me lo diga por Mensaje Privado y le ayudo

la funcion es:
instance_create(x,y,obj)

en este caso seria:
instance_create(personaje.x + A ,personaje.y - B ,obj)

en el A y en el B va el valor de diferencia que deveria haber entre la ubicacion del personage y la del latigo

si no entendiste eso ultimo, proba el juego y ajusta el valor de A y B asta que quede bien  :-[

Realmente puedes usar todas las mascaras que quieras, siempre y cuando vuelvas a la original.
Podrias poner algo como esto:

Ev Step:
if ataque=true{
mask_aux=mask_index;
mask_index=mask_latigo;
if place_meeting(x,y,objEnemigo){.....}  //colision con enemigo con el latigo
mask_index=mask_aux;
}





#5 Noviembre 11, 2009, 10:44:06 PM Ultima modificación: Noviembre 25, 2009, 09:05:25 PM por jesuan94
ahora no se como hacer para que el enemigo se elimine s?lo cuando este atacando, no siempre, ni tampoco se como diferenciar entre que este mirando a izquierda o a derecha, porque entonces creo que seria otra mascara
si quieres jugar a un juego de internet
                              DINOPARC


si alguien entra que me lo diga por Mensaje Privado y le ayudo

me ayuda alguien por favor??, estoy buscando ejemplos por el foro haber si alguno me vale pero no encuentro por ahora
si quieres jugar a un juego de internet
                              DINOPARC


si alguien entra que me lo diga por Mensaje Privado y le ayudo

#7 Noviembre 12, 2009, 05:17:57 PM Ultima modificación: Noviembre 12, 2009, 05:20:41 PM por Alfonsos1
el personaje cuando ataca tiene un sprite, no se que nombre le habras puesto pero llamemosle "Atacando".
Pero el personaje puede atacar hacia la izquierda o hacia la derecha por lo que tenemos dos sprites "Atacando" osea: "AtacandoIzquierda" y "AtacandoDerecha"

En el evento setp del enemigo pones lo siguiente:

if(Personaje_principal.sprite_index = "AtacandoDerecha")//se verifica que ataque a la derecha
{
if(Personaje_principal.x < x)// Se verifica que el personaje este a la izquierda del "malo"
{
 if(Personaje_principal.x+30 > x)// Se verifica que el personage este a menos de 50 pixeles de distancia del enemigo, yo puse 30 pero en realidad tienes que poner una cantidad igual al largo del latigo
 {
  instance_destroy();
 }
}
}

//Lo mismo pero para el otro lado
if(Personaje_principal.sprite_index = "AtacandoIzquierda")
{
if(Personaje_principal.x > x)
{
 if(Personaje_principal.x-30 < x)
 {
  instance_destroy();
 }
}
}


recuerda poner el nombre de los sprite y de los objetos correctos...

he probado y mira lo que me sali?:


FATAL ERROR in
action number 1
of  Step Event
for object fantasma:

COMPILATION ERROR in code action
Error in code at line 15:
   if(personaje.sprite_index =per_lati_der)

at position 2: Program ends before end of the code.
si quieres jugar a un juego de internet
                              DINOPARC


si alguien entra que me lo diga por Mensaje Privado y le ayudo

#9 Noviembre 12, 2009, 05:54:45 PM Ultima modificación: Noviembre 12, 2009, 06:34:47 PM por Alfonsos1
descargo el editable y edito...

EDIT:

el codigo es vastante enrredado  :-\

la unica soluccion que encontre sim hacer muchos cambios al juego poner lo siguiente en el fantasma:

evento press control:


alarm[0] = 15;


evento alarma 0:

if(personaje.sprite_index = per_lati_der)
{
if(personaje.x < x)
{
 if(personaje.x+90 > x)
 {
  instance_destroy();
 }
}
}

//Lo mismo pero para el otro lado
if(personaje.sprite_index = per_lati_izq)
{
if(personaje.x > x)
{
 if(personaje.x-100 < x)
 {
  instance_destroy();
 }
}
}

lo que tratan de decirte es que no cambies la mascara es mejor que uses el codigo
if place_meeting  y le sumas o restas valor a X segun la posicion actual del sprite,
a ver me explico mejor si estas mirando a la derecha, deberia haber un code que lo indique
digamos que en el create declaras esto
der=false;
//esta variable si esta en false significa que miras a la izquierda, y en true derecha.
logicamente el cambio del valor de la variable lo haces por los event de teclado.
ahora ya sabes si estas a la derecha o izquierda y pudes usar bien el place_meeting
//ahora en el event de colicion contra el enemigo.
if der and (place_meetign(x+16,y+8,other)
{with(other) instance_destroy()}
else
if !der and (place_meetign(x-16,y+8,other)
{with(other) instance_destroy()}
else
{aqui el codigo que afecta a tu jugador}

#11 Noviembre 14, 2009, 08:52:54 PM Ultima modificación: Noviembre 14, 2009, 10:11:53 PM por jesuan94
ya consegui que funcione bien lo del latigo, lo unico que no se que pasa es que en vez de pulsar control, tengo que quedarlo pulsado para que el enemigo se elimine, aunque solo a veces, no se que sera ahora
si quieres jugar a un juego de internet
                              DINOPARC


si alguien entra que me lo diga por Mensaje Privado y le ayudo