Conoscete uno script migliore per attaccare durante un salto o a terra? (GM: Studio 1)

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
MagicFool64
Membro
Messaggi: 77
Iscritto il: 17/12/2018, 22:26
Uso: GM:Studio 1.4 Pro
Contatta:

Conoscete uno script migliore per attaccare durante un salto o a terra? (GM: Studio 1)

Messaggio da MagicFool64 »

Ciao, precedentemente ho postato vari topic dicendo che lo sprite del mio personaggio, quando attaccava in aria dopo un salto o durante una caduta, non si animava. Questo è lo script che ho inserito in Step Event

Codice: Seleziona tutto

if(place_meeting(x,y+1,obj_wall)){
    grounded = true
}else{
    grounded = false
}

if(grounded){                   
    sprite_index = spr_walk
} else {
    if(vspeed<0){               
        sprite_index = spr_jump
    }else{                      
        sprite_index = spr_jump
    }
}

if attacca = 1
    if grounded = true
        {
        sprite_index = spr_attack;
        hspeed = 0;
        image_speed = .2;
        }
    else if grounded = false
        {
        sprite_index = spr_attack_jump;
        image_speed = .2;
        }
Ma questo è quello che succede quando attacco in aria: https://imgur.com/a/l6QR2RN
Come potete vedere, lo sprite di quando attacca in aria non sia anima, ma quello dell'attacco a terra si. Ho provato a correggerlo in vari modi, ma niente funzionava. Quindi ho pensato: qualcuno di voi conosce uno script alternativo, per fare in modo che il personaggio attacca sia in aria che a terra? Scusate se chiedo tanto
L'ignoranza è la via per l'autodistruzione

Avatar utente
Scario
Moderatore
Messaggi: 2707
Iscritto il: 26/05/2003, 20:29
Specialità: Tergiversare
Uso: GM:Studio 2
Contatta:

Re: Conoscete uno script migliore per attaccare durante un salto o a terra? (GM: Studio 1)

Messaggio da Scario »

Allora, andando con ordine:
1- perchè aprire mille topic per un solo problema? Crei solo disordine così. Se nessuno risponde è perchè non sa\non può risponderti, se cerchi una risposta immediata apri la chat Discord
2- perchè non usi i suggerimenti dati negli altri topic? Le condizioni vanno con il doppio uguale, le assegnazioni con il singolo
3- Il tuo codice non funziona perchè è in disordine: se, ad esempio, grounded è uguale a true, prima esegue la condizione dentro quel "if (grounded)", poi esegue quella all'interno di "if attacca = 1", creando problemi come hai potuto notare. Ho provato il tuo codice su un progetto GM e l'ho corretto così:
Create Event:

Codice: Seleziona tutto

attacco=0
Step Event:

Codice: Seleziona tutto

kShoot       = keyboard_check_pressed(ord("X"));
kShootRel    = keyboard_check_released(ord("X")));

if (kShoot) {
    attacca=1
} 
if (kShootRel) {
    attacca=0
}

// il tuo codice "corretto"
if(place_meeting(x,y+1,obj_parent_solid)){
    grounded = true
}else{
    grounded = false
}

if(grounded){
    if attacca==1 {                 
        sprite_index = spr_attack;
        hspeed = 0;
        image_speed = .2;
    } else {
        sprite_index = spr_walk
    }
} else {
    if attacca==1 {
        sprite_index = spr_attack_jump;
        image_speed = .2;
    } else {
        sprite_index = spr_jump
    }
}
Draw Event:

Codice: Seleziona tutto

draw_self()
Così mi sembra andare correttamente (non ho messo il controllo dell'animazione se sale o scende perchè vedevo che non la stavi utilizzando), ma se non ti torna qualcosa dimmi.
Immagine

Avatar utente
MagicFool64
Membro
Messaggi: 77
Iscritto il: 17/12/2018, 22:26
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Conoscete uno script migliore per attaccare durante un salto o a terra? (GM: Studio 1)

Messaggio da MagicFool64 »

Scario ha scritto:Allora, andando con ordine:
1- perchè aprire mille topic per un solo problema? Crei solo disordine così. Se nessuno risponde è perchè non sa\non può risponderti, se cerchi una risposta immediata apri la chat Discord
2- perchè non usi i suggerimenti dati negli altri topic? Le condizioni vanno con il doppio uguale, le assegnazioni con il singolo
3- Il tuo codice non funziona perchè è in disordine: se, ad esempio, grounded è uguale a true, prima esegue la condizione dentro quel "if (grounded)", poi esegue quella all'interno di "if attacca = 1", creando problemi come hai potuto notare. Ho provato il tuo codice su un progetto GM e l'ho corretto così:
Create Event:

Codice: Seleziona tutto

attacco=0
Step Event:

Codice: Seleziona tutto

kShoot       = keyboard_check_pressed(ord("X"));
kShootRel    = keyboard_check_released(ord("X")));

if (kShoot) {
    attacca=1
} 
if (kShootRel) {
    attacca=0
}

// il tuo codice "corretto"
if(place_meeting(x,y+1,obj_parent_solid)){
    grounded = true
}else{
    grounded = false
}

if(grounded){
    if attacca==1 {                 
        sprite_index = spr_attack;
        hspeed = 0;
        image_speed = .2;
    } else {
        sprite_index = spr_walk
    }
} else {
    if attacca==1 {
        sprite_index = spr_attack_jump;
        image_speed = .2;
    } else {
        sprite_index = spr_jump
    }
}
Draw Event:

Codice: Seleziona tutto

draw_self()
Così mi sembra andare correttamente (non ho messo il controllo dell'animazione se sale o scende perchè vedevo che non la stavi utilizzando), ma se non ti torna qualcosa dimmi.
Scusa se ho rotto le scatole per tutto questo tempo. Comunque, se anche questa volta non funziona, io mi arrendo
L'ignoranza è la via per l'autodistruzione

Avatar utente
MagicFool64
Membro
Messaggi: 77
Iscritto il: 17/12/2018, 22:26
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Conoscete uno script migliore per attaccare durante un salto o a terra? (GM: Studio 1)

Messaggio da MagicFool64 »

Funziona, scusa ancora per aver rotto le scatole. Grazie infinite
L'ignoranza è la via per l'autodistruzione

Avatar utente
Scario
Moderatore
Messaggi: 2707
Iscritto il: 26/05/2003, 20:29
Specialità: Tergiversare
Uso: GM:Studio 2
Contatta:

Re: Conoscete uno script migliore per attaccare durante un salto o a terra? (GM: Studio 1)

Messaggio da Scario »

MagicFool64 ha scritto:Funziona, scusa ancora per aver rotto le scatole. Grazie infinite
Ottimo!! Ma va, anzi, non smettere di chiedere.. e nemmeno di provarci! L'unico consiglio che mi sento di darti è di imparare a usare il debugger o di stamparti a video le variabili di ciò che non ti torna, così capisci cosa sta succedendo.
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 40 ospiti