Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: fatalfury en Febrero 24, 2013, 07:06:15 PM

Título: ¿Tengo un problema, pero no se cual es?
Publicado por: fatalfury en Febrero 24, 2013, 07:06:15 PM
Buenas tardes

Muchachos, he estado dandole vueltas a mi proyecto intentado encontrar un error.

Empecé mi proyecto programando los golpes de espada, cuando terminé, programe los saltos y los movientos (es un juego de plataformas entonces tiene gravedad)

pero, no me di cuenta, que al cambiar el codigo ahora los ataques con la espada fallan, es decir, el sprite no se muestra completo solo se muestran 1 o 2 imagenes.

-Hay una variable que aumenta cada vez que se presiona j
despues del cambio ya no aumenta la variable

Por lo que he mirado creo que es un conflicto de ordenes entre la orden de poner el sprite de stand y el de atacar, haciendo que mientras tenga oprimido atacar (desde ahora j) se muestre el sprite de ataque pero apenas suelte el boton vuelva a stand:

End Step

//if (place_free(x,y+vspeed)) {gravity = .12;} else {move_contact_solid(270,1);gravity = 0;vspeed = 0;}
if place_meeting(x,y+1,plataforma) {gravity=0 ; vspeed=0} else {gravity=0.12}

//Animaciones (quieto, caminar)
if vspeed=0 {
if keyboard_check(ord('D')) or keyboard_check(ord('A'))
{sprite_index = link_runr
image_speed=.3}
}

//Animación de Salto
if place_free (x,y+1) combo=0
if vspeed<0 sprite_index=link_jump
if vspeed>0.24 sprite_index=link_jumpd
if vspeed=0 and keyboard_check(vk_nokey) and combo=0 sprite_index=link_battle
/*creo que aqui esta el error por el  " keyboard_check(vk_nokey)" pues si suelto la tecla inmediatamente se cumple la condicion y pasa a link battle
*/



animation end

switch (sprite_index)
{
case link_atk1 :
if combo>=2 {sprite_index=link_atk2 image_index=0} else {sprite_index=link_battle combo=0}
break;
case link_atk2:
if combo>=3 {sprite_index=link_atk3 image_index=0} else {sprite_index=link_battle combo=0}
break;
case link_atk3:
sprite_index=link_battle
if sprite_index=link_battle
alarm[0]=30
combo=-1
prep=1
break;

//ataques rapidos

case link_atr1 :
if combo>=2 {sprite_index=link_atr2 image_index=0} else {sprite_index=link_battle combo=0}
if sprite_index=link_battle
alarm[0]=30
break;
case link_atr2:
if combo>=3 {sprite_index=link_atr3 image_index=0} else {sprite_index=link_battle combo=0}
if sprite_index=link_battle
alarm[0]=30
break;
case link_atr3:
if combo>=4 {sprite_index=link_atr2 image_index=0} else {sprite_index=link_battle combo=0}
if sprite_index=link_battle
alarm[0]=30
break;
case link_runr:
sprite_index=link_battle combo=0
break;
}



colision con obj_solid

plataforma=other.id

if vspeed>0
{
salto=2
vspeed=0
y=plataforma.bbox_top
}


if vspeed<0
{
y=yprevious
move_contact_all(90,-1)
vspeed=0
}

Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: Mgbu en Febrero 24, 2013, 10:04:50 PM
Se me hace dificil seguir el codigo, aunque casi seguro que el error esta donde decis, al poner el sprite a link_battle
Lo ideal seria que revises todo el sistema y lo hagas prolijo pensando en todos los movimientos (correr, atacar o nada).
Como eso es aburrido la otra es no cambiar el sprite a link_battle mientras se ataca, chequeando primero si el sprite no es ninguno de los ataques, algo asi:

if vspeed=0 and keyboard_check(vk_nokey) and combo=0 and sprite_index != link_atk1 and sprite_index != link_atk2 sprite_index=link_battle

Ahi tendrias que agregar todos los sprites

Tambien creo que no hay ninguna condicion a cumplir para que el jugador se mueva mientras ataca, lo que deberias arreglar

Pero igual lo mejor seria pensar bien la manera de hacerlo siguiendo unos estados, por ejemplo uno guarda en una variable 0, 1 o 2, para saber si el jugador esta quieto, moviendose o atacando respectivamente. Y asi ir haciendo el engine prolijamente. Para eso te recomiendo lapiz y papel
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: fatalfury en Febrero 25, 2013, 03:17:34 PM
Okey es una buena idea, pero no quiero  dearmar mi codigo, y si dejo el engine para mejor comprension?
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: Mgbu en Febrero 25, 2013, 03:58:55 PM
Probaste agregando esas condiciones andes de cambiar al sprite link_battle?
No hace falta que envies todo el juego, podes hacer un juego nuevo con solo las partes que interesan para solucionar el error, eso seria de mucha ayuda
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: fatalfury en Febrero 25, 2013, 04:08:01 PM
Pues siii funciono casi bien, solo que

la variable combo ya no aumenta...

Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: Mgbu en Febrero 25, 2013, 04:17:52 PM
No entiendo bien que significaría la variable combo. Pero se debe estar seteando a 0 en animation_end, o si no el jugador esta volando, como dice en step "if place_free (x,y+1) combo=0"

La variable combo esta siempre en 0 en el modo debug? si no es lo que dije antes no se que seria
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: fatalfury en Febrero 25, 2013, 04:44:16 PM
ok

pasa esto

cada vez que oprimo 'j' (tecla de ataque) la variable combo aumenta en uno hasta 3(hasta porque son tres ataques, si es uno es una taque, si es 2 es otro ataque). mediante este codigo:


if combo=0 {sprite_index=link_atk1 image_index=0}
combo=min(combo+1,3)


es decir que cuando se oprime 'j' cambia de sprite y la variable combo aumenta +1 por vez.

A! lo de estar volando no es  eso revisé la vspeed y es siempre 0 asi que esta en el suelo

Lo que pasa es que pasa el sprite pero la variable no aumenta.
debe haber algo que resetee la variable en el evento end step, o se activa en algun lado la alarm
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: luckylandia007 en Febrero 25, 2013, 04:52:06 PM
Fatal_fury.
Yo tuve una situación de combo también y me desenvolví así...

Primero hice los sprite de ataque... 1 para golpe 1, otro para golpe 2, otro para golpe 3 etc.,..

Cada sprite de cada ataque tenia 3 images_index (osea 3 partes)

Y lo desarrollaba en dos partes

1) por medio de alarmas hacia que cada animación de los golpe en su image_index dure un poco mas la 3
(osea el usuario pegaba el golpe pero al final del golpe "espera" a que golpees otra vez) y que si no pasaba nada vuelva a la posicion de quieto.

2) cada vaz que tocaba la tecla "X" ...
cuando la toco por primera vez (osea si el personaje esta con su sprite de quieto)
hacia el golpe 1 (sprite golpe 1)
si el sprite es golpe 1 y su image index es 3 hacia el golpe 2...
si el sprite es golpe 2 y su image index es 3 hacia el golpe 3...
(Y así)
Te lo explico en palabras para que entiendas mi idea pero si me esperas cuando vengo de trabajar esta noche te hago un codigo rapido.
Pero recorda, nunca es tarde para empezar con el engine de 0, eso va a hacer un juego mas poderoso. saludos
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: fatalfury en Febrero 25, 2013, 05:00:40 PM
Sabes, cuando empeze a desarrollar el codigo que tengo al ponerme en los combos, al principio tuve tu misma idea (caaaasi lo mismo que tetrico XD)

la diferencia es que si la image_index= 3 (en mi caso era 5) tendria muy poco tiempo para que volviera a oprimir la tecla, (una subimagen es muy poco)  pero esa idea de hacer que la imagen final dure algo mas solucionaria eso, pero no supe como hacerlo asi que desarme todo y busque otro camino y resulte con mu codigo actual.

si te sirvio me alegraria usarlo tambien y te lo agradeceria bastante, gracias.

Tambien quiero resolver este problema que tengo, no me puede quedar grande ademas me gusta mucho reolver problemas de codigo y cosas asi. jeje
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: Mgbu en Febrero 25, 2013, 10:24:14 PM
Cita de: fatalfury en Febrero 25, 2013, 05:00:40 PM
ademas me gusta mucho reolver problemas de codigo y cosas asi. jeje
Y me haces resolver el problema a mi? XD

Sera porque hay un sprite con muy pocas subimagenes, provocando que el evento animation_end se ejecute muy rapido?

No se que puede ser, se me hace dificil saberlo. Se me ocurre que agregues un mensaje cuando combo se haga 0, entonces asi podes descubrir en que lugar de tu codigo la variable coombo se hace 0 cuando no debe. Eso se hace con "show_debug_message(mensaje)". Entonces por ejemplo en animation_end ponés:

switch (sprite_index)
{
case link_atk1 :
if combo>=2 {sprite_index=link_atk2 image_index=0} else {sprite_index=link_battle combo=0 show_debug_message("animation_end, linea 4")}
break;
case link_atk2:
if combo>=3 {sprite_index=link_atk3 image_index=0} else {sprite_index=link_battle combo=0show_debug_message("animation_end, linea 7")}
break;
//....


Entonces ejevutas el juego en modo debug, haces click en "Show Messages" y vas a ver que esta mal, por ejemplo si lo que provoca que combo sea 0 es en el case link_atk2, el debug te va a mostrar muchas veces animation_end, linea 7
Título: Re:¿Tengo un problema, pero no se cual es?
Publicado por: luckylandia007 en Febrero 26, 2013, 05:01:14 AM
Mira yo lo hice con una linea de tiempo puse que en el step 1 que la sprite index sea golpe 1, y la velocidad de la imagen 0 y aparezca la image index 1 en el step 3 la 2 en el step 4 la 3 y en  la 12 cambiaba a sprite index quieto .
Osea al tener la speed en 0 sos vos el que mediante los step de la linea de tiempo dominas cuanto tarda la animacion.
Solo resta apretar el boton x, y si la imagen index del sprite index golpe 1 es 3 que arranque la time line golpe 2.
Leete en el manual la parte de time line ;)s es muuuuy util vas a tener mas dominio