è più di un anno che non lavoro con Game Maker Studio e quando sono tornato a scaricare il programma ho trovato solo la versione 2. Adattandomi velocemente alla nuova grafica, ho ripreso un vecchio progetto di un gioco stile "Metal Slug" e ho ritrovato alcuni problemi che avevo già anni fa e che spero mi possiate aiutare a risolvere.
Ho inserito nell'evento "step" le direttive per la gravità. Da quel momento non so che problema si sia venuto a creare ma nella posizione fermo il pg assume automaticamente direction=0 e mostra solamente lo sprite di destra. Questo mi è molto di intralcio per altri comandi(come sparare, saltare ecc...).
https://ibb.co/dsZyjv
Un ulteriore problema è il salto in sè(salto semplice, salto in avanti e salto indietro). Il mio pg dovrebbe compiere un movimento con relativo cambio di sprite una volta premuto il tasto "space". Avendo impostato il cambio sprite tramite l'evento "draw" il pg letteralmente scompare durante il salto per poi ricomparire solo quando raggiunge l'apice dello spostamento e nuovamente una volta toccata terra.
Di seguito il codice dell'evento "draw".
Codice: Seleziona tutto
if keyboard_check(vk_right){
if keyboard_check(vk_space){
if !place_free(x,y+1){
vspeed=-9;
}
draw_sprite(pg_sal,0-12,x,y);
}
if keyboard_check(vk_shift){
draw_sprite(pg_spa,0-12,x,y);
}
else{
draw_sprite(pg_mov,0-12,x,y);
}
}
if keyboard_check(vk_left){
if keyboard_check(vk_space){
if !place_free(x,y+1){
vspeed=-9;
}
draw_sprite(pg_sal2,0-12,x,y);
}
if keyboard_check(vk_shift){
draw_sprite(pg_spa2,0-12,x,y);
}
else{
draw_sprite(pg_mov2,0-12,x,y);
}
}
if speed=0{
if direction=0{
if keyboard_check(vk_space){
if !place_free(x,y+1){
vspeed=-9;
}
draw_sprite(pg_sal,0-12,x,y);
}
else{
draw_sprite(pg_stand,0-12,x,y);
}
}
if direction=180{
if keyboard_check(vk_space){
if !place_free(x,y+1){
vspeed=-9;
}
draw_sprite(pg_sal2,0-12,x,y);
}
else{
draw_sprite(pg_stand2,0-12,x,y);
}
}
}
Ho provato ad inserire il cambio sprite al cambio di velocità verticale come segue(sempre nell'evento "draw").
Codice: Seleziona tutto
if vspeed!=0{
draw_sprite(pg_sal,0-12,x,y);
}
Ho tentato di imporre un "if position=0" e un seguente "if position=180" ma l'effetto è nullo, il pg riprende a svanire.
Spero possiate aiutarmi perché non ho più idee valide.
Spero di essere stato sufficientemente chiaro e vi ringrazio anticipatamente per l'aiuto!
Buona serata,
Gian.