velocità diverse in base alle prestazioni

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
Pano
Membro
Messaggi: 80
Iscritto il: 24/03/2013, 19:08
Contatta:

velocità diverse in base alle prestazioni

Messaggio da Pano »

Chiedo l'aiuto ai più esperti riguardo ad un problema che ho riscontrato ma di cui non ho trovato una chiara soluzione.

Ho il gioco in cui ho fissato il game speed a 30 step/s e un oggetto che si muove ad esempio a 10 pixel/step, quindi in teoria a 30*10=300 pixel/secondo.
Se installo il gioco su un dispositivo "top di gamma" esso funziona bene e vedo il gioco fluido e con le velocità volute.
Se installo il gioco su un vecchio dispositivo di fascia bassa vedo l'oggetto in questione muoversi molto più lentamente. La mia spiegazione è che il dispositivo non riesca a raggiungere i 30 step/secondo e che quindi l'oggetto si muova a 10 Pixel/step * 20 step/secondo = 200 pixel/secondo.

Quindi, per assurdo, chi gioca su un dispositivo datato sarebbe più avvantaggiato di chi gioca su un dispositivo più potente e questo non è pensabile in un gioco come il mio che si basa sulla velocità di scorrimento degli oggetti.

Come risolvo? Ho visto che esiste il delta_time ma non ho capito bene come usarlo. Oppure potrei aumentare la velocità degli oggetti in base alla differenza tra gli step/secondo teorici (30) e quelli reali in quel momento.
Qualcuno che ha già affrontato questo problema?
Grazie

Avatar utente
Alv
Membro
Messaggi: 133
Iscritto il: 14/11/2014, 22:33
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Sicilia
Contatta:

Re: velocità diverse in base alle prestazioni

Messaggio da Alv »

Credo sia difficile che, anche in un telefono di fascia bassa, il gioco giri a meno di 30 fps (se il codice del gioco è sufficientemente performante).

In ogni caso, potresti esprimere le velocità in pixel/secondo come unità di misura. Sapendo che gli fps sono il numero di frame al secondo, potresti usare le equazioni del moto per calcolare in ogni step le nuove posizioni e velocità.

Esempio:
Moto rettilineo e uniforme: x=x0+vt
diventa: x+=v/fps
Ultima modifica di Alv il 14/01/2021, 22:07, modificato 4 volte in totale.

Avatar utente
ball-man_3000
Moderatore
Messaggi: 1263
Iscritto il: 26/08/2009, 13:42
Specialità: Contare con le dita
Uso: GM:Studio 2
Località: Bologna
Contatta:

Re: velocità diverse in base alle prestazioni

Messaggio da ball-man_3000 »

Ciao Pano,
il fenomeno che descrivi è detto frame dependent movent. Sostanzialmente, la velocità del gioco dipende dal framerate, e questo è perfetto finchè hai un framerate stabile. Per framerate instabili è possibile utilizzare un'altra tipologia di movimento, detta time dependent movement, che consiste nel definire di quanti pixel le cose devono muoversi AL SECONDO, quindi indipendentemente dal framerate cui l'applicativo gira.
Come ha fatto notare Alv, con una leggera conoscenza di fisica meccanica è possibile dedurre un metodo che permetta di trasformare i tuoi valori per frame in valore per secondo. E' sufficiente calcolare a quanti fps il gioco gira e calcolare quindi la tua costante che chiameremo delta, definito come 1/fps.
Per ottenere quindi un movimento di n pixel al secondo sull'asse x sarà sufficiente moltiplicare n per il tuo delta:

Codice: Seleziona tutto

//calcolo degli fps
...
delta = 1 / fps
x += n * delta	//n è il numero di pixel al secondo
Ora, è bene notare che non è tutto oro quel che luccica. Adottare questa tecnica certo permetterà anche a chi possiede dispositivi dell'era della pietra di giocare con una mediocre fluidità al tuo gioco, ma potresti andare incontro ad una serie di problemi dati dall'approssimazione dei numeri a virgola mobile in grado di farti pentire della tua scelta.
Il buon vecchio frame dependent movement è utilizzato con successo da molti giochi che semplicemente assumono che tu disponga di un dispositivo che possiede i requisiti minimi specificati(d'altronde, se si chiamano requisiti minimi ci sarà un motivo, no?), e spesso è meglio non complicarsi la vita.
Ti consiglio comunque di approfondire l'argomento sul web, ove è pieno di interessanti articoli sull'argomento.
Quattro corde sono meglio

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 148 ospiti