Rallentamenti: metodi, idee, soluzioni per snellire GM

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Avatar utente
Riky0302
Membro
Messaggi: 69
Iscritto il: 31/05/2014, 13:37
Specialità: Grafico
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da Riky0302 »

Buonasera ragazzi, oggi ho terminato i primi due livelli di un piccolo gioco che sto realizzando, solo che ho un problema, nel primo livello fila tutto liscio, ma quando vado a collidere con un personaggio che mi manda nella seconda room, che sarebbe il secondo livello, nella seconda room rallenta terribilmente, ora la mia domanda è, se ci sono problemi di rallentamento perché non ci sono fin dall'inizio del gioco? ma solo quando entro nel secondo livello?

- Animazioni per ora non ce ne sono, i personaggi sono dei semplici quadrati.
- Gli object che ci sono sono i muri e le varie piattaforme.
- Il Background è un png disegnato da me diverso per ogni livello di dimensioni 1280x720.

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da Vallo92 »

Riky0302 ha scritto:Buonasera ragazzi, oggi ho terminato i primi due livelli di un piccolo gioco che sto realizzando, solo che ho un problema, nel primo livello fila tutto liscio, ma quando vado a collidere con un personaggio che mi manda nella seconda room, che sarebbe il secondo livello, nella seconda room rallenta terribilmente, ora la mia domanda è, se ci sono problemi di rallentamento perché non ci sono fin dall'inizio del gioco? ma solo quando entro nel secondo livello?

- Animazioni per ora non ce ne sono, i personaggi sono dei semplici quadrati.
- Gli object che ci sono sono i muri e le varie piattaforme.
- Il Background è un png disegnato da me diverso per ogni livello di dimensioni 1280x720.
Molto strano... Per caso hai aumentato la room speed della prima room? Se si, probabilmente l'effetto di rallentamento è dato dalla diversità dei due valori che hai impostato. :sisisi:
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si

Avatar utente
mac12
Membro d'elite
Messaggi: 1124
Iscritto il: 18/09/2012, 17:32
Specialità: programmazione
Uso: GameMaker 8.1
Contatta:

Re: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da mac12 »

se le room speed non coincidono, prova ad iniziare subito dal secondo livello:
Se lagga, allora è "colpa" del livello in se(ma da quello che dici non dovrebbero esserci rallentamenti, dev'essere qualche pezzetto di codice che viene eseguito solo nella seconda room che rallenta il tutto).
Se non lagga allora la cosa è molto strana :fapensare:

Avatar utente
Riky0302
Membro
Messaggi: 69
Iscritto il: 31/05/2014, 13:37
Specialità: Grafico
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da Riky0302 »

si è stata una mi svista, nella fretta di testare i livelli non mi sono accorto che le due stanze avevano velocità diverse :spat: :spat:
grazie ragazzi gentili come sempre :cappa:

Arcade Blues
Newbie
Messaggi: 47
Iscritto il: 09/01/2016, 12:05
Specialità: Sogno a occhi aperti
Uso: GM:Studio 1.4 Master
Località: Napoli
Contatta:

Re: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da Arcade Blues »

Uno dei metodi che mi sembra non sia stato aggiunto sino ad ora è quello del frame skip.

E' molto pratico e veloce da implementare e viene in aiuto soprattutto se il rendering del frame ciuccia molta cpu.
Non aiuta quasi per nulla se il tempo cpu è speso altrove es. nell' ia , fisica etc.

Potrebbe comunque essere riadattato per altri sistemi e sottosistemi di gioco es potreste aggiornare l'ia o un particolare aspetto di un object solo nelle instanze pari in un frame e nelle instanze dispari in un altro frame in modo molto simile o anche dividerle su piu' frame tramite if(((instanza.id) % numgruppi) == GruppoAttivo) Esegui Calcolo su instanza altrimenti skippa.

Per utilizzare il frame skip si setta la room speed a 60 e si sceglie in base alla potenza del device di renderizzare un frame ogni 2 frame o ogni 3 ottenendo 60 , 30 o 20 fps.
Differenza puramente visuale a parte, il gioco girerà identico su tutti i device con aggiornamento a 60 fps per input,fisica e quant'altro.

Applicato alla grafica non intacca il determinismo del gioco in nessun modo; Invece, se applicato su altri sistemi di gioco, il metodo è deterministico solo per valori fissi;
girerà, quindi, in maniera differente su 2 pc con valori di skipping differenti o variabili, perdendo di determinismo.

Codice: Seleziona tutto

#define timing_FrameSkip_Create
//nell' evento create di un vostro controller.
FrameCounter = 0;
FrameToSkip = 2;

#define timing_FrameSkip_Step 
//nell' evento step
if(FrameToSkip == 0)exit;
FrameCounter++;//Se usate il FrameCounter altrove dovreste incrementare il valore prima del controllo del frameskipping a 0
if(FrameCounter % FrameToSkip )
    draw_enable_drawevent(false);
else 
    draw_enable_drawevent(true);
Questa è un implementazione veloce visto che non ho il mio codice alla mano comunque dovrebbe funzionare, o almeno, farvi capire il concetto.
FrameCounter ad un certo punto andrà in overflow e wrapperà, non dovrebbe essere un problema, ma per i più pipi si puo' anche evitarlo accumulando in FrameCounter.
nel codice di esempio avremo 30fps con room settata a 60.Per avere gli originali 60 settare FrameToSkip a 0.

Avatar utente
Willshir3
Membro
Messaggi: 228
Iscritto il: 28/06/2014, 16:23
Uso: GM:Studio 2
Contatta:

Re: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da Willshir3 »

Domanda nabbissima: come faccio a compilare GML in ordine, con gli spazi giusti? Ricordo che c'era un modo per far si che il tool stesso mi staccasse le varie righe di codice una volta premuto spazio.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 42 ospiti