Salto infinito!

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Avatar utente
CloudC93
Membro
Messaggi: 67
Iscritto il: 15/03/2014, 17:59
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Comiso
Contatta:

Salto infinito!

Messaggio da CloudC93 »

Salve ragazzi! Sto iniziando a creare giochini con Game Maker per prendere confidenza con il linguaggio GML e creando un semplice platform mi sono accorto che premendo ripetutamente il tasto per il salto, il pg salta all'infinito... Come devo fare per effettuare il salto solo una volta o massimo due?

Ecco il codice che uso:

Nello step event del pg:

Codice: Seleziona tutto

//Se la freccia -> viene premuta il personaggio va a destra
if(keyboard_check(vk_right) && place_free(x+4, y)){
    sprite_index = spr_right;
    image_speed = 0.2;
    x += 4;
}
//Se la freccia -> viene rilasciata setta la velocità a 0
if(keyboard_check_released(vk_right))
    image_speed = 0;

//---------------------------------\\    

//Se la freccia <- viene premuta il personaggio va a sinistra
if(keyboard_check(vk_left) && place_free(x-4, y)){
    sprite_index = spr_left;
    image_speed = 0.2;
    x -= 4;
}
//Se la freccia <- viene rilasciata setta la velocità a 0
if(keyboard_check_released(vk_left))
    image_speed = 0;

//---------------------------------\\    

//Se la freccia 'su' o la 'spacebar' vengono premuti il personaggio salta
if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up)) && place_free(x, y+10)){
        vspeed -= 5;
        gravity = 0.5
}
E nel "terreno" con collision uso questo :

Codice: Seleziona tutto

vspeed = 0;
gravity = 0;
Grazie mille in anticipo!
"...non può piovere per sempre..."

The Adventures of Unknown Hero - http://theadventuresofunknownhero.wordpress.com/

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Salto infinito!

Messaggio da Solid Snake »

Modifica il codice così se il pavimento è un oggetto solido:

Codice: Seleziona tutto

if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up) && !place_free(x, y+1)) && place_free(x, y+1)){
        vspeed -= 5;
        gravity = 0.5
}
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: Salto infinito!

Messaggio da gameplay_extreme »

effetivamente tu devi saltare se la poszione sottostante il giocatore NON è libera, che è il contrario di quello che hai scritto tu...
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
CloudC93
Membro
Messaggi: 67
Iscritto il: 15/03/2014, 17:59
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Comiso
Contatta:

Re: Salto infinito!

Messaggio da CloudC93 »

Il pavimento l'ho lasciato normale, così come il personaggio... adesso provo a rendere solido il terreno e cambio il codice e poi ti faccio sapere!

EDIT:
Modifica il codice così se il pavimento è un oggetto solido:
CODICE: SELEZIONA TUTTO
if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up) && !place_free(x, y+1)) && place_free(x, y+1)){
vspeed -= 5;
gravity = 0.5
}
Così non mi salta.. avevo pensato di creare un ciclo do/until cosi da incrementare una variabile salto che se è uguale a 2 non mi fa saltare di troppo...
Ultima modifica di CloudC93 il 15/03/2014, 18:58, modificato 1 volta in totale.
"...non può piovere per sempre..."

The Adventures of Unknown Hero - http://theadventuresofunknownhero.wordpress.com/

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: Salto infinito!

Messaggio da civic71 »

Codice: Seleziona tutto

if(keyboard_check(vk_right) && place_free(x+4, y)&& (nomeVariabile==false)){ nomeVariabile=true;}

// nel evento di collisione con il terreno :
nomeVariabile=false;
In un secondo momento al posto di nomeVariabile potresti usare anche una variabile fra vspeed o gravity , ma prima devi ...

Avatar utente
CloudC93
Membro
Messaggi: 67
Iscritto il: 15/03/2014, 17:59
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Comiso
Contatta:

Re: Salto infinito!

Messaggio da CloudC93 »

civic71 ha scritto:

Codice: Seleziona tutto

if(keyboard_check(vk_right) && place_free(x+4, y)&& (nomeVariabile==false)){ nomeVariabile=true;}

// nel evento di collisione con il terreno :
nomeVariabile=false;
In un secondo momento al posto di nomeVariabile potresti usare anche una variabile fra vspeed o gravity , ma prima devi ...
Scusa puoi spiegarlo meglio.. non ho capito bene :fapensare:

Edit: mi sono accorto che quel codice non è per saltare.. altrimenti dovrebbe essere vk_up e place_free(x, y+4) ???
"...non può piovere per sempre..."

The Adventures of Unknown Hero - http://theadventuresofunknownhero.wordpress.com/

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Salto infinito!

Messaggio da Solid Snake »

gameplay_extreme ha scritto:effetivamente tu devi saltare se la poszione sottostante il giocatore NON è libera, che è il contrario di quello che hai scritto tu...
Svista... ecco il codice funzionante. Rimetti normale il pavimento:

Codice: Seleziona tutto

if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up) && !place_empty(x, y+1)) && place_free(x, y+1)){
        vspeed -= 5;
        gravity = 0.5
}
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
CloudC93
Membro
Messaggi: 67
Iscritto il: 15/03/2014, 17:59
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Comiso
Contatta:

Re: Salto infinito!

Messaggio da CloudC93 »

Solid Snake ha scritto:
gameplay_extreme ha scritto:effetivamente tu devi saltare se la poszione sottostante il giocatore NON è libera, che è il contrario di quello che hai scritto tu...
Svista... ecco il codice funzionante. Rimetti normale il pavimento:

Codice: Seleziona tutto

if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up) && !place_empty(x, y+1)) && place_free(x, y+1)){
        vspeed -= 5;
        gravity = 0.5
}
Non mi funge... Adesso non salta per niente..

EDIT: funziona.. però non risolve il problema del salto infinito.. più premo più salta..
"...non può piovere per sempre..."

The Adventures of Unknown Hero - http://theadventuresofunknownhero.wordpress.com/

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Salto infinito!

Messaggio da Solid Snake »

Strano... Posta il codice completo.
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
CloudC93
Membro
Messaggi: 67
Iscritto il: 15/03/2014, 17:59
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Comiso
Contatta:

Re: Salto infinito!

Messaggio da CloudC93 »

Solid Snake ha scritto:Strano... Posta il codice completo.
E' in alto =)

EDIT: Risolto così

Codice: Seleziona tutto

//Setto la gravità
if(place_free(x, y+1))
    gravity = 0.5;
else
    gravity = 0;

//Se la freccia -> viene premuta il personaggio va a destra
if(keyboard_check(vk_right) && place_free(x+4, y)){
    sprite_index = spr_right;
    image_speed = 0.2;
    x += 4;
}
//Se la freccia -> viene rilasciata setta la velocità a 0
if(keyboard_check_released(vk_right))
    image_speed = 0;

//---------------------------------\\    

//Se la freccia <- viene premuta il personaggio va a sinistra
if(keyboard_check(vk_left) && place_free(x-4, y)){
    sprite_index = spr_left;
    image_speed = 0.2;
    x -= 4;
}
//Se la freccia <- viene rilasciata setta la velocità a 0
if(keyboard_check_released(vk_left))
    image_speed = 0;

//---------------------------------\\    


//Se la freccia 'su' o la 'spacebar' vengono premuti il personaggio salta
if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up)) && !place_free(x, y+1) && place_free(x, y-1)){
        vspeed -= 5;
        gravity = 0.5;
}
place_free(x, y-1) aggiungendo questo..

Il tuo codice era giusto, però dovevi cambiare la y+1 a y-1
"...non può piovere per sempre..."

The Adventures of Unknown Hero - http://theadventuresofunknownhero.wordpress.com/

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: Salto infinito!

Messaggio da civic71 »

Hai ragione avevo riportato male :spat: .
Bene se hai risolto io volevo scrivere così :
if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up)) && place_free(x, y+10)&& (vspeed==0)){
vspeed -= 5;
gravity = 0.5
}
Ma con "!place_free(x, y+1))" è meglio.

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Salto infinito!

Messaggio da Solid Snake »

CloudC93 ha scritto:
Solid Snake ha scritto:Strano... Posta il codice completo.
E' in alto =)

EDIT: Risolto così

Codice: Seleziona tutto

if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up)) && !place_free(x, y+1) && place_free(x, y-1)){
        vspeed -= 5;
        gravity = 0.5;
}
Puoi migliorare il codice:

Codice: Seleziona tutto

if((keyboard_check_pressed(vk_space) || keyboard_check_pressed(vk_up)) && !place_free(x, y+1)){
        vspeed -= 5;
        gravity = 0.5;
}
Nel primo codice che ho postato ho scritto per sbaglio "&& !place_free(x, y+1) && place_free(x, y-1)".
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
CloudC93
Membro
Messaggi: 67
Iscritto il: 15/03/2014, 17:59
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Comiso
Contatta:

Re: Salto infinito!

Messaggio da CloudC93 »

Sisi ho capito ;)!

Grazie a tutti comunque ! :D
"...non può piovere per sempre..."

The Adventures of Unknown Hero - http://theadventuresofunknownhero.wordpress.com/

Sharkiller
Newbie
Messaggi: 8
Iscritto il: 06/09/2017, 12:37
Uso: GameMaker 8.1
Contatta:

Re: Salto infinito!

Messaggio da Sharkiller »

Scusate se riapro il post ma sto impazzendo. Ho scritto il codice nell'evento step

Codice: Seleziona tutto

If (keyboard_check_released(vk_up) && !place_free(x, y+1)){
        vspeed -= 5;
        gravity = 0.5;
}
Il salto diventa infinito, cioè non scende più continua a salire.
Ho provato a creare l'evento key press e inserire solo il codice !place_free ecc, ma il risultato non cambia sapete aiutarmi?

Avatar utente
marcyblaze
Membro
Messaggi: 81
Iscritto il: 02/10/2014, 19:41
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: sotto i ponti
Contatta:

Re: Salto infinito!

Messaggio da marcyblaze »

Sharkiller ha scritto:Scusate se riapro il post ma sto impazzendo. Ho scritto il codice nell'evento step

Codice: Seleziona tutto

If (keyboard_check_released(vk_up) && !place_free(x, y+1)){
        vspeed -= 5;
        gravity = 0.5;
}
Il salto diventa infinito, cioè non scende più continua a salire.
Ho provato a creare l'evento key press e inserire solo il codice !place_free ecc, ma il risultato non cambia sapete aiutarmi?
Prova a cambiare quel keyboard_check_released in keyboard_check_pressed. ;-)

Sharkiller
Newbie
Messaggi: 8
Iscritto il: 06/09/2017, 12:37
Uso: GameMaker 8.1
Contatta:

Re: Salto infinito!

Messaggio da Sharkiller »

Grazie, ma ho risolto cambiando programma sono passato a gamemaker studio 1.4 :) e lo stesso codice funziona :asd: Scusa ne approffitto se non e un problema :) sai mica che script devo usare per far si che quando mi avvicino a un oggetto, questo sparì ogni tot tempo e se mi allontano smetta? A me manca solo il pezzo in cui spara in continuazione, il resto sono riuscito con

Codice: Seleziona tutto

if distance_to_object(nome_oggetto)<150
{
Instance_change(nome_oggetto,true)
}
E nell' altro oggetto

Codice: Seleziona tutto

//In create
Instance_create(obj_proiettile)
//in step
If distance_to_object(nome_oggetto)>150
{
Instance_change(nome_oggetto,true)
}
Ma spara solo un colpo :cry:
Edit: ho risolto settando gli alarm :first:
Chiedo l'ultima cosa spero :fapensare:
Perché nel gioco quando faccio un salto o cado contro il muro se premo la freccia per spostarmi Lo sprite rimane bloccato contro il muro? Cioè se salto due blocchi e per sbaglio anziché atterrarci sopra ci vado contro lo sprite anziché scivolare verso il basso si blocca nell'oggetto. Nell'oggetto in questione ho usato vspeed=0; gravity=0 trattandosi di una side scrolling consigli?

Avatar utente
marcyblaze
Membro
Messaggi: 81
Iscritto il: 02/10/2014, 19:41
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: sotto i ponti
Contatta:

Re: Salto infinito!

Messaggio da marcyblaze »

Il codice per la collisione con il muro è vspeed = 0; gravity = 0; ho capito bene? Se è così ti consiglio di fare

Codice: Seleziona tutto

//Horizontal Collision
if place_meeting(x+hsp,y,obj_muropavimento)
{
    while (!place_meeting(x+sign(hsp),y,obj_muropavimento)) x+=sign(hsp);
    hsp = 0;
}

x += hsp;

//Vertical Collision
if place_meeting(x,y+vsp,obj_muropavimento) 
{
    while (!place_meeting(x,y+sign(vsp),obj_muropavimento)) y+=sign(vsp);
    if (sign(vsp) == 1) 
    {
        grounded = 1;
    }
    vsp = 0;
}
else
{
    grounded = 0;
}
y += vsp;
hsp sarebbe hspeed, vsp sarebbe vspeed e grounded è una variabile che uso per controllare se il giocatore sta a terra oppure no, per evitare il salto infinito.

Sharkiller
Newbie
Messaggi: 8
Iscritto il: 06/09/2017, 12:37
Uso: GameMaker 8.1
Contatta:

Re: Salto infinito!

Messaggio da Sharkiller »

marcyblaze ha scritto:Il codice per la collisione con il muro è vspeed = 0; gravity = 0; ho capito bene? Se è così ti consiglio di fare

Codice: Seleziona tutto

//Horizontal Collision
if place_meeting(x+hsp,y,obj_muropavimento)
{
    while (!place_meeting(x+sign(hsp),y,obj_muropavimento)) x+=sign(hsp);
    hsp = 0;
}

x += hsp;

//Vertical Collision
if place_meeting(x,y+vsp,obj_muropavimento) 
{
    while (!place_meeting(x,y+sign(vsp),obj_muropavimento)) y+=sign(vsp);
    if (sign(vsp) == 1) 
    {
        grounded = 1;
    }
    vsp = 0;
}
else
{
    grounded = 0;
}
y += vsp;
hsp sarebbe hspeed, vsp sarebbe vspeed e grounded è una variabile che uso per controllare se il giocatore sta a terra oppure no, per evitare il salto infinito.
Scusa il ritardo, ma ho visto ora la risposta.
Comunque grazie mille, ma non funziona. Il mio personaggio quando collide con la parete rimane bloccato se continuo ad andare in quella direzione, e se rilascio si ferma a mezz'aria. Io vorrei che quando collide, a priori scivoli verso il pavimento. Ci ero riuscito (se non ricordo male) con

Codice: Seleziona tutto

if place_meeting (x,y,obj_wall2)
{
vspeed=4;
}
invece quando collideva col pavimento usavo

Codice: Seleziona tutto

vspeed=0;
gravity=0;
Ma appena ho salvato e riaperto il gioco non ha più funzionato e non avevo modificato niente..

Avatar utente
marcyblaze
Membro
Messaggi: 81
Iscritto il: 02/10/2014, 19:41
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: sotto i ponti
Contatta:

Re: Salto infinito!

Messaggio da marcyblaze »

Sharkiller ha scritto:
marcyblaze ha scritto:Il codice per la collisione con il muro è vspeed = 0; gravity = 0; ho capito bene? Se è così ti consiglio di fare

Codice: Seleziona tutto

//Horizontal Collision
if place_meeting(x+hsp,y,obj_muropavimento)
{
    while (!place_meeting(x+sign(hsp),y,obj_muropavimento)) x+=sign(hsp);
    hsp = 0;
}

x += hsp;

//Vertical Collision
if place_meeting(x,y+vsp,obj_muropavimento) 
{
    while (!place_meeting(x,y+sign(vsp),obj_muropavimento)) y+=sign(vsp);
    if (sign(vsp) == 1) 
    {
        grounded = 1;
    }
    vsp = 0;
}
else
{
    grounded = 0;
}
y += vsp;
hsp sarebbe hspeed, vsp sarebbe vspeed e grounded è una variabile che uso per controllare se il giocatore sta a terra oppure no, per evitare il salto infinito.
Scusa il ritardo, ma ho visto ora la risposta.
Comunque grazie mille, ma non funziona. Il mio personaggio quando collide con la parete rimane bloccato se continuo ad andare in quella direzione, e se rilascio si ferma a mezz'aria. Io vorrei che quando collide, a priori scivoli verso il pavimento. Ci ero riuscito (se non ricordo male) con

Codice: Seleziona tutto

if place_meeting (x,y,obj_wall2)
{
vspeed=4;
}
invece quando collideva col pavimento usavo

Codice: Seleziona tutto

vspeed=0;
gravity=0;
Ma appena ho salvato e riaperto il gioco non ha più funzionato e non avevo modificato niente..
Ma il codice che ti ho inviato dove lo hai messo? Mi sono dimenticato di dirti che va nello Step Event, quello normale.

Sharkiller
Newbie
Messaggi: 8
Iscritto il: 06/09/2017, 12:37
Uso: GameMaker 8.1
Contatta:

Re: Salto infinito!

Messaggio da Sharkiller »

marcyblaze ha scritto:
Sharkiller ha scritto:
marcyblaze ha scritto:Il codice per la collisione con il muro è vspeed = 0; gravity = 0; ho capito bene? Se è così ti consiglio di fare

Codice: Seleziona tutto

//Horizontal Collision
if place_meeting(x+hsp,y,obj_muropavimento)
{
    while (!place_meeting(x+sign(hsp),y,obj_muropavimento)) x+=sign(hsp);
    hsp = 0;
}

x += hsp;

//Vertical Collision
if place_meeting(x,y+vsp,obj_muropavimento) 
{
    while (!place_meeting(x,y+sign(vsp),obj_muropavimento)) y+=sign(vsp);
    if (sign(vsp) == 1) 
    {
        grounded = 1;
    }
    vsp = 0;
}
else
{
    grounded = 0;
}
y += vsp;
hsp sarebbe hspeed, vsp sarebbe vspeed e grounded è una variabile che uso per controllare se il giocatore sta a terra oppure no, per evitare il salto infinito.
Scusa il ritardo, ma ho visto ora la risposta.
Comunque grazie mille, ma non funziona. Il mio personaggio quando collide con la parete rimane bloccato se continuo ad andare in quella direzione, e se rilascio si ferma a mezz'aria. Io vorrei che quando collide, a priori scivoli verso il pavimento. Ci ero riuscito (se non ricordo male) con

Codice: Seleziona tutto

if place_meeting (x,y,obj_wall2)
{
vspeed=4;
}
invece quando collideva col pavimento usavo

Codice: Seleziona tutto

vspeed=0;
gravity=0;
Ma appena ho salvato e riaperto il gioco non ha più funzionato e non avevo modificato niente..
Ma il codice che ti ho inviato dove lo hai messo? Mi sono dimenticato di dirti che va nello Step Event, quello normale.
Si l'ho messo nello step event del personaggio. E nella collisione col muro gravity e vsp a 0

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 42 ospiti