Conta passi
- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Conta passi
Salve ragazzi come posso realizare un semplice conta passi in un rpg?
Se il pg si sposta di 3 caselle (32x32) sono 3 passi fatti e cosi via.
Non mi viene in mente niente per realizarlo spero in un vostro aiuto.
Se il pg si sposta di 3 caselle (32x32) sono 3 passi fatti e cosi via.
Non mi viene in mente niente per realizarlo spero in un vostro aiuto.
- Alv
- Membro
- Messaggi: 133
- Iscritto il: 14/11/2014, 22:33
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Sicilia
- Contatta:
Re: Conta passi
Ciao. Beh, dipende come è stato implementato il movimento del personaggio. Dovresti usare una variabile globale, e mettere nel punto giusto del codice qualcosa come:
Codice: Seleziona tutto
global.conta_passi+=1;
- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Re: Conta passi
Grazie per la risposta, per muovere il player uso questo codice:
in step event
in collisione con il blocco (blocco settato solido)
Il contapassi funziona alla grande, ho solo un problema con le collisioni di object in movimento, cioè se un npc si muove e collide con il player i due si bloccano, come posso fare per risolvere?
Le npc usa lo stesso codice del player per muoversi.
in step event
Codice: Seleziona tutto
if (place_snapped(32, 32))
{
hspeed = 0;
vspeed = 0;
if (key_dx)
{
hspeed = 4;
vspeed = 0;
global.p_passi+=1;
}
if (key_sx)
{
hspeed = -4;
vspeed = 0;
global.p_passi+=1;
}
if (key_su)
{
hspeed = 0;
vspeed = -4;
global.p_passi+=1;
}
if (key_giu)
{
hspeed = 0;
vspeed = 4;
global.p_passi+=1;
}
}
Codice: Seleziona tutto
if (place_snapped(32, 32))
{
hspeed = 0;
vspeed = 0;
global.p_passi-=1;
}
Le npc usa lo stesso codice del player per muoversi.
- Alv
- Membro
- Messaggi: 133
- Iscritto il: 14/11/2014, 22:33
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Sicilia
- Contatta:
Re: Conta passi
Prima di impostare hspeed o vspeed su pressione del tasto, dovresti verificare se la posizione è libera (ad esempio la posizione x+32, se il giocatore si vuole muovere verso destra). Questo può essere fatto con una funzione di rilevamento collisioni. Il problema che potrebbe porsi è se entrambi i personaggi (giocatore e npc) decidono di spostarsi contemporaneamente verso una cella che a entrambi sembra libera. Anche in quel caso si bloccherebbero!
Quindi, se vorresti optare per una soluzione sicura senza cambiare troppo il codice, dovresti utilizzare un oggetto temporaneo per "etichettare" la cella che il giocatore ha selezionato come destinazione. In questo modo, l'npc vedrà quell'oggetto e capirà che la cella è bloccata.
Potresti associare ad ogni personaggio un oggetto di questo tipo (invisibile), salvarti l'id per controllarlo. Quando premi per esempio freccia a destra, l'oggetto farà uno scatto di 32 pixel (cioè occuperà subito la cella destinazione), mentre il personaggio ci metterà qualche step per raggiungere la cella successiva (in base alla velocità).
Quindi, se vorresti optare per una soluzione sicura senza cambiare troppo il codice, dovresti utilizzare un oggetto temporaneo per "etichettare" la cella che il giocatore ha selezionato come destinazione. In questo modo, l'npc vedrà quell'oggetto e capirà che la cella è bloccata.
Potresti associare ad ogni personaggio un oggetto di questo tipo (invisibile), salvarti l'id per controllarlo. Quando premi per esempio freccia a destra, l'oggetto farà uno scatto di 32 pixel (cioè occuperà subito la cella destinazione), mentre il personaggio ci metterà qualche step per raggiungere la cella successiva (in base alla velocità).
Ultima modifica di Alv il 03/01/2021, 14:58, modificato 5 volte in totale.
- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Re: Conta passi
Niente non vuole saperne di funzionare 
I passi che ho fatto sono questi:
- creato l'object o_ck_cella per il controllo della cella
- alla pressione del tasto sposto l'object o_ck_cella nella direzione in cui deve spostarsi il player
-l'object o_ck_cella controlla se la cella è occupata con la funzione collision_rectangle
-se la cella è occupata il player non si muove se non lo è si muove
Conclusioni a volte funziona a volte no
credo che il problema sta nel fatto che se l object non è allineato con la griglia il controllo non funziona.

I passi che ho fatto sono questi:
- creato l'object o_ck_cella per il controllo della cella
- alla pressione del tasto sposto l'object o_ck_cella nella direzione in cui deve spostarsi il player
-l'object o_ck_cella controlla se la cella è occupata con la funzione collision_rectangle
-se la cella è occupata il player non si muove se non lo è si muove
Conclusioni a volte funziona a volte no

credo che il problema sta nel fatto che se l object non è allineato con la griglia il controllo non funziona.
- Scario
- Moderatore
- Messaggi: 2707
- Iscritto il: 26/05/2003, 20:29
- Specialità: Tergiversare
- Uso: GM:Studio 2
- Contatta:
Re: Conta passi
Non so se ho ben capito il problema: il controllo delle collisioni funziona con gli elementi statici ma non con (ad esempio) gli npc quando camminano?

- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Re: Conta passi
Si il problema è proprio questo.Scario ha scritto:Non so se ho ben capito il problema: il controllo delle collisioni funziona con gli elementi statici ma non con (ad esempio) gli npc quando camminano?
- Alv
- Membro
- Messaggi: 133
- Iscritto il: 14/11/2014, 22:33
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Sicilia
- Contatta:
Re: Conta passi
Ciao! La soluzione che ti ho proposto non è il massimo della semplicità: è possibile che ci siano dei bug. Per debuggare, ti conviene rendere l'oggetto marcatore temporaneamente visibile.Kimera_V2 ha scritto:Niente non vuole saperne di funzionare
I passi che ho fatto sono questi:
- creato l'object o_ck_cella per il controllo della cella
- alla pressione del tasto sposto l'object o_ck_cella nella direzione in cui deve spostarsi il player
-l'object o_ck_cella controlla se la cella è occupata con la funzione collision_rectangle
-se la cella è occupata il player non si muove se non lo è si muove
Conclusioni a volte funziona a volte no
credo che il problema sta nel fatto che se l object non è allineato con la griglia il controllo non funziona.
Per quanto riguarda lo sprite dell'oggetto marcatore, puoi impostare la bounding box a "Rectangle", "Full image". In questo modo non hai bisogno della funzione collision_rectangle, perchè l'oggetto sarà esso stesso un rettangolo.
Ti basta usare place_meeting(x, y, object). Faccio un esempio:
Codice: Seleziona tutto
if (key_sx && !place_meeting(x-32,y,o_ck_cella))
{
hspeed = -4;
vspeed = 0;
my_cella.x-=32;
global.p_passi+=1;
}
Codice: Seleziona tutto
// crea un oggetto di tipo o_ck_cella e salva l'id in my_cella
my_cella=instance_create(x,y,o_ck_cella);
Codice: Seleziona tutto
// elimina l'oggetto o_ck_cella associato al personaggio
with (my_cella)
instance_destroy();
Spero sia tutto chiaro; comunque dovresti poter utilizzare il codice che ti ho postato senza problemi.
Se poi lo vuoi rifinire ulteriormente, potresti assegnare ai personaggi l'oggetto marcatore come parent. In questo modo anche i personaggi si comporteranno come marcatori, ed eviterai ogni problema di sovrapposizione tra personaggi.
Ultima modifica di Alv il 04/01/2021, 11:21, modificato 6 volte in totale.
- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Re: Conta passi
Ho provato ma non cambia nulla a volte funziona a volte no.
- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Re: Conta passi
Secondo me il problema è questo:
perchè se il pg o l'npc non sono allineati con la griglia non riceveranno mai il controllo delle collisioni o qualsiasi altra cosa.
Codice: Seleziona tutto
if (place_snapped(32, 32))
- Alv
- Membro
- Messaggi: 133
- Iscritto il: 14/11/2014, 22:33
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Sicilia
- Contatta:
Re: Conta passi
Ok, ho realizzato un esempio editabile (funzionante).
http://alv90.altervista.org/stor/Project3.gmx.zip
Tasti giocatore 1: frecce
Tasti giocatore 2: WASD
http://alv90.altervista.org/stor/Project3.gmx.zip
Tasti giocatore 1: frecce
Tasti giocatore 2: WASD
Ultima modifica di Alv il 05/12/2020, 17:03, modificato 2 volte in totale.
- Kimera_V2
- Membro
- Messaggi: 118
- Iscritto il: 27/06/2013, 14:11
- Uso: GM:Studio 1.4 Pro
- Località: CPU
- Contatta:
Re: Conta passi
Grazie mille appena posso lo provoAlv ha scritto:Ok ho realizzato un esempio editabile (funzionante).
Tasti giocatore 1: frecce
Tasti giocatore 2: WASD
http://alv90.altervista.org/stor/Project3.gmx.zip
edit: modificato link in citazione su segnalazione
Chi c’è in linea
Visitano il forum: Nessuno e 22 ospiti