sggsoftware
Membro
Messaggi: 178
Iscritto il: 01/07/2007, 15:09
Uso: GM:Studio 2
Località: Sicilia
Contatta:

[tutorial] Movimento platform

Messaggio da sggsoftware »

Ecco qualche consiglio su come creare un buon movimento platform privo di bug, lasciando stare le variabili direction e speed, e preferendo invece la potente funzione move_contact_solid.

La funzione è molto semplice: basta passare come argomenti la direzione del movimento e lo spostamento massimo che il personaggio può eseguire.

Eventualmente, per semplificare le cose, si possono creare 2 script molto utili:

Script xmove:

Codice: Seleziona tutto

// muove l'oggetto a sinistra
if (argument0<0) move_contact_solid(180,-argument0);
// muove l'oggetto a destra
else if (argument0>0) move_contact_solid(0,argument0);
Script ymove:

Codice: Seleziona tutto

// muove l'oggetto verso l'alto
if (argument0<0) move_contact_solid(90,-argument0);
// muove l'oggetto verso il basso
else if (argument0>0) move_contact_solid(270,argument0);
Poi, nel nostro codice, è sufficiente trattare le 2 componenti del moto del personaggio (x e y) indipendentemente:

Codice: Seleziona tutto

if (keyboard_check(vk_left)) xmove(-2);
else if (keyboard_check(vk_right)) xmove(2);
Il movimento x è fatto! Io in verità gli aggiungerei anche effetti di accelerazione/decelerazione, ma questa comunque è una buona base. E ora passiamo al movimento y. Questo è un po' più difficile: ci ho messo un po' a creare un movimento y soddisfacente e senza bug, aggiungendo varie correzioni nel tempo.

Codice: Seleziona tutto

yCam=false;
// gestisce il salto
if (keyboard_check(vk_up) && !place_free(x,y+1))
{
    if (yVel>=0) yVel=-7;
}
// applica la gravità
yVel+=0.5;
// limite velocità di caduta
yVel=min(yVel,7);
// muove il giocatore
ymove(yVel);
// sbatte la testa
if (yVel<0)
{
    if (place_free(x,y-1)) yCam=true;
    else yVel=1;
}
// azzera la velocità
if (yVel>=0)
{
    if (place_free(x,y+1)) yCam=true;
    else yVel=0;
}
La variabile yCam riveste un'importanza fondamentale per l'animazione da assegnare al personaggio: se è true, significa che il giocatore è sospeso in aria; se è false ha i piedi a terra.

Ovviamente i codici dei movimenti x e y vanno nell'evento Step del giocatore. Bisogna inoltre definire yVel e yCam nell'evento Create.

Codice: Seleziona tutto

yVel=0;
yCam=false;
P.S. Se state creando un gioco che richiede maggiore precisione di spostamento (accelerazioni/decelerazioni molto graduali o framerate elevati), vi consiglio di lasciar perdere gli script xmove e ymove, e di dare un'occhiata a quest'altro mio post:
http://gmitalia.altervista.org/gmi_foru ... 203#p26203
Avatar utente
Nemesi_20xx
Newbie
Messaggi: 23
Iscritto il: 31/03/2010, 13:44
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Nemesi_20xx »

Appena ho un attimo di tempo lo provo! Più che altro il problema per un platform puo' crearsi al momento di associare al movimento il relativo sprite, soprattutto se per un platform ipotizziamo anche un pg che attacca il nemico in modi differenti. Ad esempio nel plat che sto provando a creare il pg ha associati gli sprite da fermo, da accovacciato e poi in movimento, oltre a 2 attacchi, normale e da accovacciato. Inoltre ho inserito anche la possibilità di lanciare palle di fuoco se e solo se ha l'health al massimo. L'ho realizzato tramite cicli if - else - else/if, e più o meno è fluido, ma a volte, a secoda delle varie combinazioni di tasti premuti, alcuni sprites non coincidono... difatti sto ancora lavorandoci. Tutto questo giro di parole per chiederti se fosse possibile inserire nel tutorial anche qualcosa legato allo sprite change XD :uppa:
Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Jak »

Il vero problema dei platform e di altri tipi di gioco in verità sono le collisioni! Vista la grande varietà di situazioni tipica di un platform è difficile gestire tutti i bug relativi ad esse! Non l'ho vistoa fondo ma sgg sembra aver fatto un bel lavoro.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Avatar utente
Nemesi_20xx
Newbie
Messaggi: 23
Iscritto il: 31/03/2010, 13:44
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Nemesi_20xx »

Jak ha scritto:Il vero problema dei platform e di altri tipi di gioco in verità sono le collisioni! Vista la grande varietà di situazioni tipica di un platform è difficile gestire tutti i bug relativi ad esse! Non l'ho vistoa fondo ma sgg sembra aver fatto un bel lavoro.
verissimo! è stato uno dei miei primi problemi: durante il salto il pg, se il tasto direzionale era premuto, se collideva con una piattaforma allo stesso livello, restava a mezz'aria! come se la piattaforma fosse una sorta di carta moschicida :spat: Se smettevo di premere la direzione naturalmente cadeva. Poi ho risolto con un controllo place_free settando in X il valore X+(pixel di spostamento)... :shock: stupidamente consentivo il movimento di tot pixel controllando solo se il 1° pixel fosse libero...
Avatar utente
Cosimo
GMI Advanced
Messaggi: 2120
Iscritto il: 29/10/2009, 19:16
Uso: GM:Studio 2
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Cosimo »

Jak ha scritto:Il vero problema dei platform e di altri tipi di gioco in verità sono le collisioni! Vista la grande varietà di situazioni tipica di un platform è difficile gestire tutti i bug relativi ad esse! Non l'ho vistoa fondo ma sgg sembra aver fatto un bel lavoro.
Ne so qualcosa... :fapensare:
Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Jak »

Bè, lasciate perdere, tra qualche settimana (spero, scanso impegni) risolverò tutti questi problemi!
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: [tutorial] Movimento platform

Messaggio da cp94 »

Jak ha scritto:Il vero problema dei platform e di altri tipi di gioco in verità sono le collisioni!
mai successo, per chi sa usare bene i PARENT
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine
Filo
GMI Honor
Messaggi: 6097
Iscritto il: 09/08/2008, 14:31
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Filo »

in prog avanzata? :fapensare:
Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Jak »

cp94 ha scritto:[mai successo, per chi sa usare bene i PARENT
Ma che centrano con le collisioni? Fatto sta che come dicono tutti le collisioni hanno sempre bug!
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Avatar utente
pontino
Admin
Messaggi: 947
Iscritto il: 17/09/2006, 21:30
Contatta:

Re: [tutorial] Movimento platform

Messaggio da pontino »

Dopo decenni mi sono deciso: voglio provare a fare un gioco semi-serio.

Stavo cercando di creare un motore per il platform, utilizzando questo codice..
Come posso fare in modo che quando salto tenendo premuto il pulsante di salto più a lungo, vado più in alto?
Sempre utilizzando xmove e ymove.. Non è che non ho voglia di cercare nel forum, ma adesso devo andare, a lunedì, e grazie per chi mi potrà rispondere..

Non ho bisogno di codice, mi basta solo che mi diciate come fareste voi. Ciao
ਗੁਰੂ
Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Jak »

Io farei una variabile che uso come timer. Quando premo il tasto del salto imposto la vspeed ad un tot e aumento questa variabile. Finchè la variabile non raggiungerà un certo livello la variabile sarà reimpostata di continuo e quindi il salto durerà di più. chiaramente bisognerà resettare la variabile al rilascio del pulsante(bisogna però stare attenti che non possa ripremere il pulsante prima che tocchi terra se no premendo a scatti salta quanto vuole.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Homunculus »

Io prroverei a fare una cosa piuttosto semplice:

al rilascio del tasto per saltare, se vspeed e' negativo (stiamo salendo) divido vspeed per 2
Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Jak »

Per me è troppo brusco il tuo sistema homu. Ad ogni modo pontino ricordati di impostare un salto massimo con un'if. Homu, e se il tasto non viene rilasciato? Qua servirebbe l'aiuto di lukem visto che lui l'ha fatto per ab2...
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: [tutorial] Movimento platform

Messaggio da Homunculus »

Jak ha scritto:Per me è troppo brusco il tuo sistema homu. Ad ogni modo pontino ricordati di impostare un salto massimo con un'if. Homu, e se il tasto non viene rilasciato? Qua servirebbe l'aiuto di lukem visto che lui l'ha fatto per ab2...
Non é particolarmente brusco, l'avevo provato diverso tempo fa. Al limite se lo si vuole meno brusco su fa /3 o /4 . Se il tasto non viene rilasciato fa il salto completo no?