Error nelle animazioni
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Error nelle animazioni
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
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
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: Error nelle animazioni
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
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
SU ALARM 0
SU ALARM 1
SU STEP
SU GAME START
SU ANIMATION END
SU SCRIPT PROIETTILE
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;
Codice: Seleziona tutto
can_shoot=true;
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;
}
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;
Codice: Seleziona tutto
image_speed = 0.7;
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;
}
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
- 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
Scusa, ma image_speed dove la fai aumentare?
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
L'ho fatto aumentare, se non ho sbagliato, quando il pg sta sparando (e quando cammina).Xxshark888xX ha scritto:Scusa, ma image_speed dove la fai aumentare?
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
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.
- 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
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...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.
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
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.
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.
- 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
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
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
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.
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.
- 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
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 altroPaperpaint 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.
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
Ci ho provato...
ma l'animazione di ricarica non sempre viene riprodotta per intero :\
https://www.youtube.com/watch?v=IEpV4YA ... e=youtu.be
ma l'animazione di ricarica non sempre viene riprodotta per intero :\
https://www.youtube.com/watch?v=IEpV4YA ... e=youtu.be
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: Error nelle animazioni
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
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
cosa serve il comando floor(4)?Vallo92 ha scritto:Non so se può risolvere ma prova con:Codice: Seleziona tutto
if(image_index == floor(4))
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: Error nelle animazioni
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:
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
- Paperpaint
- Membro attivo
- Messaggi: 375
- Iscritto il: 02/01/2014, 16:19
- Specialità: Visionario lol
- Uso: GameMaker 8.1
- Contatta:
Re: Error nelle animazioni
E dove lo dovrei mettere?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)
Puoi spiegarmi in poche parole, quel codice?
No sai, perché vorrei imparare, e fancedo copia incolla non si impara nulla.
Comunque non funziona D:
- 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
Usa round per arrotondare...Comunque non è per questo che non gli funziona, perché image_index se non sbaglio già viene arrotondato...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)
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: Error nelle animazioni
Quel codice dovevi metterlo al posto dell'if che controlla il valore dlel'image_index (che avevi scritto nei post precedenti).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:
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.
-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
- 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
Paper, ma tu cambi l'image_index o l'image_speed?
Chi c’è in linea
Visitano il forum: Nessuno e 47 ospiti