Error nelle animazioni

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Error nelle animazioni

Messaggio da Paperpaint »

Allora, proverò a descrivere il problema, dico questo perché non è facile da capire a meno che non si abbia tra le mani il file eseguibile.

Dopo aver creato il sistema di sparo come The bindng of Isaac, NON SOLO grazie ad utente che devo ringraziare, ho fatto in modo, che non appena si smette di sparare, la posizione non rimane solo congelata per 30 steps verso l'ultima direzione nella quale si ha sparato, ma ho fatto in modo che, dopo aver sparato, la direzione rimane bloccata, mentre viene riprodotto uno sprite con la pistola che non spara.

Dov'è il problema?

Se tengo premuto mentre mi muovo nessuno: tengo premuto, sparo, rilascio, rimango rivolto verso quella direzione con lo sprite di una pistola che non spara.
Però se sono fermo, e tengo premuto l'animazione di sparo rimane congelata ad un determinato frame.

Poi, se premo ripetutamente anziché tener premuto, l'animazione di pistola che non spara mentre il movimento è freezato, è sostituita dall'animazione di sparo stessa.

Vi posso copiare il codice(anzi... i codici?)

Grazie :)

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Error nelle animazioni

Messaggio da Vallo92 »

Posta il codice, altrimenti così è praticamente impossibile capire dove sta il problema e risolverlo.
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

SU ALARM 0

Codice: Seleziona tutto

///REIMPOSTA DIREZIONE DA FERMO

if(!isWalking) {

 if(dir == 0){
 sprite_index=spr_9mm_movesx;}
 image_index=0;
 image_speed = 0;
 
  if(dir == 1){
 sprite_index=spr_9mm_moveback;
 image_index=0;
 image_speed = 0;}
 
  if(dir == 2){
 sprite_index=spr_9mm_movedx;
 image_index=0;
 image_speed = 0;}
 
  if(dir == 3){
 sprite_index=spr_9mm_moveforth;
 image_index=0;
 image_speed = 0;}
 }
 

Codice: Seleziona tutto

isShooting = false;
after_shoot = false;
SU ALARM 1

Codice: Seleziona tutto

can_shoot=true;
SU STEP

Codice: Seleziona tutto

///SPARO

if(can_shoot){
                                  
    if(keyboard_check(vk_left)){              
               script_proiettile(1);
               can_shoot = false;
               alarm[1]=15;
                          
        }
                                          
    if(keyboard_check(vk_down)){                   
            script_proiettile(0);    
            can_shoot = false;
            alarm[1]=15;
            
            
    if(keyboard_check(vk_right)){
               script_proiettile(3);
               can_shoot = false;
               alarm[1]=15;
                
           
    if(keyboard_check(vk_up)){
               script_proiettile(2);
               can_shoot = false;
               alarm[1]=15;
                
             
                }
            }
        }
    }

Codice: Seleziona tutto

///SPARO DURANTE MOVIMENTO
if (keyboard_check(ord('A'))) //Se viene premuto il tasto A
{

 if (isShooting == false) //Se il PG non sta sparando
 {
  sprite_index=spr_9mm_movesx; //Allora avviene l'animazione del PG in movimento verso sinistra senza pistola
 }
 isWalking = true; //E' setta questa variabile su true, ovvero il PG si sta muovendo
 x-=vel;
 //direction = 180; 
}
if (keyboard_check(ord('D'))) //Se viene premuto il tasto D
{

 if (isShooting == false) //Se il PG non sta sparando
 {
  sprite_index=spr_9mm_movedx; //Allora avviene l'animazione del PG in movimento verso destra senza pistola
 }
 isWalking = true; //E' setta questa variabile su true, ovvero il PG si sta muovendo
 x+=vel;
 //direction = 0; //Questa per voi penso sia obsoleta, a me serve per impostare la direzione del movimento
}

if (keyboard_check(ord('W'))) //Se viene premuto il tasto W
{
 
 
 if (isShooting == false) //Se il PG non sta sparando
 {
  sprite_index=spr_9mm_moveforth; //Allora avviene l'animazione del PG in movimento verso sopra senza pistola
 }
 isWalking = true;
 y-=vel;
   //E' setta questa variabile su true, ovvero il PG si sta muovendo
 //direction = 90; //Questa per voi penso sia obsoleta, a me serve per impostare la direzione del movimento
}

if (keyboard_check(ord('S'))) //Se viene premuto il tasto S
{

if (isShooting == false) //Se il PG non sta sparando
 {
  sprite_index=spr_9mm_moveback; //Allora avviene l'animazione del PG in movimento verso sotto senza pistola
 }
 isWalking = true; //E' setta questa variabile su true, ovvero il PG si sta muovendo
 y+=vel;
 //direction = -90; //Questa per voi penso sia obsoleta, a me serve per impostare la direzione del movimento
}
// ***FINE MOVIMENTO*** \\

// ***SPARO*** \\\
if (keyboard_check(vk_left)) //Se viene premuta la freccetta sinistra
{
dir = 0;
 isShooting = true; //Setta questa variabile su true, ovvero il PG sta sparando nella direzione verso sinistra
 //instance_create(x,y,pgShoot_obj); //Crea il proiettile
 if (isWalking == false) //Se il PG non si sta muovendo
 {
  sprite_index=spr_9mm_shoot_stsx; //Animazione del PG che spara senza movimento
 }
 else //Altrimenti se si sta muovendo
 {
  sprite_index=spr_9mm_shoot_movesx; //Animazione del PG che spara in movimento verso sinistra
 }
 
 alarm[0] = 30; //Delay che tiene bloccato il PG nella posizione verso sinistra
}

if (keyboard_check(vk_right)) //Se viene premuta la freccetta destra
{
dir = 2
 isShooting = true; //Setta questa variabile su true, ovvero il PG sta sparando nella direzione verso destra
 //instance_create(x,y,pgShoot_obj); //Crea il proiettile
 if (isWalking == false) //Se il PG non si sta muovendo
 {
  sprite_index=spr_9mm_shoot_stdx; //Animazione del PG che spara senza movimento
 }
 else //Altrimenti se si sta muovendo
 {
  sprite_index=spr_9mm_shoot_movedx; //Animazione del PG che spara in movimento verso destra
 }
 
 alarm[0] = 30; //Delay che tiene bloccato il PG nella posizione verso destra
}

if (keyboard_check(vk_up)) //Se viene premuta la freccetta sopra
{
dir = 3;
 isShooting = true; //Setta questa variabile su true, ovvero il PG sta sparando nella direzione verso sopra
  //Crea il proiettile
 if (isWalking == false) //Se il PG non si sta muovendo
 {
  sprite_index=spr_9mm_shoot_stforth; //Animazione del PG che spara senza movimento
 }
 else //Altrimenti se si sta muovendo
 {
  sprite_index=spr_9mm_shoot_moveforth; //Animazione del PG che spara in movimento verso destra
 }
 
 alarm[0] = 30; //Delay che tiene bloccato il PG nella posizione verso sopra
}

if (keyboard_check(vk_down)) //Se viene premuta la freccetta sotto
{
dir = 1
 isShooting = true; //Setta questa variabile su true, ovvero il PG sta sparando nella direzione verso sotto
 //instance_create(x,y,pgShoot_obj); //Crea il proiettile
 if (isWalking == false) //Se il PG non si sta muovendo
 {
  sprite_index=spr_9mm_shoot_stback; //Animazione del PG che spara senza movimento
 }
 else //Altrimenti se si sta muovendo
 {
  sprite_index=spr_9mm_shoot_moveback; //Animazione del PG che spara in movimento verso sotto
 
 }
 
 alarm[0] = 30; //Delay che tiene bloccato il PG nella posizione verso sotto
}
// ***FINE SPARO*** \\

if (isWalking == true) //Se il PG si sta muovendo
{
 if (!keyboard_check(vk_anykey)) //Però nessun tasto è premuto, automaticamente significa che il PG è fermo
 {
  isWalking = false; //Quindi setto la variabile su false
}

if(!isWalking){
  
  image_speed=0;

} 
else
{
image_speed=0.7;
}

 /*motion_set(direction,2); //Allora lo faccio muovere nella direzione del tasto premuto alla velocità di 2
}
else //Altrimenti se è su false
{
 motion_set(0,0); //Fermo il movimento del PG
*/}

Codice: Seleziona tutto

if(!after_shoot){
if(keyboard_check_released(vk_left))
{
after_shoot = true;
sprite_index = spr_9mm_afshoot_movesx;
alarm[0]= 30;
}
if(keyboard_check_released(vk_down))
{
after_shoot = true;
sprite_index = spr_9mm_afshoot_moveback;
alarm[0]= 30;
}


if(keyboard_check_released(vk_right))
{
after_shoot = true;
sprite_index = spr_9mm_afshoot_movedx;
alarm[0]= 30;
}

SU GAME START

Codice: Seleziona tutto

///VARIABILI
globalvar isShooting; 
isShooting = false
globalvar isWalking;
isWalking = false;
globalvar vel;              //velocità di movimento
vel=3;

globalvar after_shoot;
after_shoot = false;
//######################################################################################
      //          false : non sta camminando
//######################################################################################
globalvar anim_shoot;       
anim_shoot=false;
//######################################################################################
globalvar shooting;         //indica se sta sparando
shooting=false;             //valori:   true : sta sparando
                            //          false : non sta sparando
                            //diventa falsa quando dopo aver sparato si muove
//######################################################################################
     //          false : non può sparare
//######################################################################################                            
globalvar dir;              //direzione verso cui deve girarsi
dir=0;                      //valori:   0 : sotto
                            //          1 : sinistra
                            //          2 : sopra
                            //          3 : destra
//######################################################################################
globalvar weap;             //arma selezionata
weap=0;                     //valori:   0 : 9mm
                            //DA AGGIUNGERE ARMI...


globalvar can_shoot;
can_shoot = true;

SU ANIMATION END

Codice: Seleziona tutto

image_speed = 0.7;
SU SCRIPT PROIETTILE

Codice: Seleziona tutto

var bullet;                                 //indica l'oggetto proiettile che deve essere creato
var inst;                                   //indica l'ultimo proiettile creato
var xx0;
var yy0;
var xx1;
var yy1;           
var xx2;
var yy2;
var xx3;
var yy3;                                     
switch(weap){                               //nel caso in cui 'weap' sia:
case 0:                                     //0:
    bullet=obj_9mm_bull;                    //imposta come proiettile quello della 9mm
    xx0=x-1;                                //offset per la creazione del proiettile
    yy0=y-1;                
    xx1=x-10;
    yy1=y-4;
    xx2=x-3;
    yy2=y-1;
    xx3=x+10;
    yy3=y-4;                
    break;
    //DA AGGIUNGERE PROIETTILI
}
switch(argument0){                          //se spara
case 0:                                     //sotto:
    inst=instance_create(xx0,yy0,bullet);     //crea il proiettile
    inst.vspeed=10;                         //imposta velocità
    break;
case 1:                                     //sinistra:
    inst=instance_create(xx1,yy1,bullet);     //crea il proiettile
    inst.image_angle=270;                   //ruota di 270 gradi in senso antiorario
    inst.hspeed=-10;                        //imposta velocità
    break;
case 2:                                     //fa lo stesso per sopra e destra
    inst=instance_create(xx2,yy2,bullet);
    inst.image_angle=180;
    inst.vspeed=-10;
    break;
case 3:
    inst=instance_create(xx3,yy3,bullet);
    inst.image_angle=90;
    inst.hspeed=10;
    break;
}

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »


Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Error nelle animazioni

Messaggio da Xxshark888xX »

Scusa, ma image_speed dove la fai aumentare?
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

Xxshark888xX ha scritto:Scusa, ma image_speed dove la fai aumentare?
L'ho fatto aumentare, se non ho sbagliato, quando il pg sta sparando (e quando cammina).

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

E comunque, talvolta quando si avvia il gioco il pg non spara, e la variabile isWalking viene settata permanentemente a 1, per toglierlo bisogna riavviare tutto.

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Error nelle animazioni

Messaggio da Xxshark888xX »

Paperpaint ha scritto:E comunque, talvolta quando si avvia il gioco il pg non spara, e la variabile isWalking viene settata permanentemente a 1, per toglierlo bisogna riavviare tutto.
Guarda, a me dai codici che tu hai postato SEMBRA tutto in regola, quindi non saprei proprio come aiutarti... Secondo me c'è qualche problema con image_speed o image_index...
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

Esiste qualche funzione per fermare un'animazione quando voglio io?

Dovrei fare in modo che con il pulsante R si ricarichi, e che una volta terminata l'animazione, lo sprite ritorna libero, visto che l'animazione di ricarica è singola e viene riprodotta faccia a faccia con il giocatore.

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Error nelle animazioni

Messaggio da Xxshark888xX »

Paperpaint ha scritto:Esiste qualche funzione per fermare un'animazione quando voglio io?

Dovrei fare in modo che con il pulsante R si ricarichi, e che una volta terminata l'animazione, lo sprite ritorna libero, visto che l'animazione di ricarica è singola e viene riprodotta faccia a faccia con il giocatore.

Sì, usa image_index
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

Quindi funzionerebbe il codice if(image_index == 4)?

Perché poi ripeto, devo fare in modo che lo sprite sia forzato quando si ricarica, e ci sono riuscito, ma devo fare in modo che non sia loopato e quando arrivi alla fine automaticamente finisca la ricarica, ho provato ad usare alarm, ma ho paura di usarne troppi e di rendere l'objcet un casino. :confuso:

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Error nelle animazioni

Messaggio da Xxshark888xX »

Paperpaint ha scritto:Quindi funzionerebbe il codice if(image_index == 4)?

Perché poi ripeto, devo fare in modo che lo sprite sia forzato quando si ricarica, e ci sono riuscito, ma devo fare in modo che non sia loopato e quando arrivi alla fine automaticamente finisca la ricarica, ho provato ad usare alarm, ma ho paura di usarne troppi e di rendere l'objcet un casino. :confuso:
Certo che funzionerebbe! Puoi usare anche alarms fatti da te e metterli in un 'code' singolo così da non incasinare il codice del movimento o altro :)
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

Ci ho provato...
ma l'animazione di ricarica non sempre viene riprodotta per intero :\

https://www.youtube.com/watch?v=IEpV4YA ... e=youtu.be

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Error nelle animazioni

Messaggio da Vallo92 »

Non so se può risolvere ma prova con:

Codice: Seleziona tutto

if(image_index == floor(4))
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

Vallo92 ha scritto:Non so se può risolvere ma prova con:

Codice: Seleziona tutto

if(image_index == floor(4))
cosa serve il comando floor(4)?

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Error nelle animazioni

Messaggio da Vallo92 »

http://docs.yoyogames.com/source/dadios ... floor.html
floor(); serve ad arrotondare il valore. Comunque prima penso di aver scritto una boiata... xD Prova con:

Codice: Seleziona tutto

if(floor(image_index) == 4)
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
Paperpaint
Membro attivo
Messaggi: 375
Iscritto il: 02/01/2014, 16:19
Specialità: Visionario lol
Uso: GameMaker 8.1
Contatta:

Re: Error nelle animazioni

Messaggio da Paperpaint »

Vallo92 ha scritto:http://docs.yoyogames.com/source/dadios ... floor.html
floor(); serve ad arrotondare il valore. Comunque prima penso di aver scritto una boiata... xD Prova con:

Codice: Seleziona tutto

if(floor(image_index) == 4)
E dove lo dovrei mettere?
Puoi spiegarmi in poche parole, quel codice? :?
No sai, perché vorrei imparare, e fancedo copia incolla non si impara nulla.
Comunque non funziona D:

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Error nelle animazioni

Messaggio da Xxshark888xX »

Vallo92 ha scritto:http://docs.yoyogames.com/source/dadios ... floor.html
floor(); serve ad arrotondare il valore. Comunque prima penso di aver scritto una boiata... xD Prova con:

Codice: Seleziona tutto

if(floor(image_index) == 4)
Usa round per arrotondare...Comunque non è per questo che non gli funziona, perché image_index se non sbaglio già viene arrotondato...
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Error nelle animazioni

Messaggio da Vallo92 »

Paperpaint ha scritto:E dove lo dovrei mettere?
Puoi spiegarmi in poche parole, quel codice? :?
No sai, perché vorrei imparare, e fancedo copia incolla non si impara nulla.
Comunque non funziona D:
Quel codice dovevi metterlo al posto dell'if che controlla il valore dlel'image_index (che avevi scritto nei post precedenti).
Non c'è molto da spiegare (ti ho anche postato il link della parte riguardante "floor" del manuale). floor arrotonda per difetto il valore indicato all'interno delle sue parentesi. Quindi in questo caso viene arrotondato il valore di image_index ogni volta che viene effettuato il controllo. Ho provato a postarti questo codice perché a seconda dell'image_speed assegnata all'obj, il valore dell'image_index potrebbe saltare il 4 (visto che nell'if hai indicato che image_index deve essere == 4), e quindi non "avverare" la condizione.
Comunque lascia perdere questa cosa... Xxshark888xX ha detto che l'image_index viene già arrotondato da qualche parte, quindi questo codice risulta inutile. :sisisi:
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Error nelle animazioni

Messaggio da Xxshark888xX »

Paper, ma tu cambi l'image_index o l'image_speed?
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 47 ospiti