Rallentamenti: metodi, idee, soluzioni per snellire GM

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Avatar utente
PeppeAs95
GMI Advanced
Messaggi: 2231
Iscritto il: 24/06/2008, 16:10
Specialità: Modellazione[LD-HD]
Località: Sonosce (MO)
Contatta:

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

Messaggio da PeppeAs95 »

Perchè non aggiungere object dopo che il gioco è avviato e metterci un loading come tutti i giochi normali?
Cioè, prima di entrare in una room ci metto "loading" un if_object(o altro) exists(ecc...) e avviare la room ma eliminare gli objects/sprites non usati. Così il gioco rimane con pochi mega, e và perciò più fluido... semplice no?
Immagine

Mario: Livello 51Immagine
Luigi: livello 51Immagine
Bowser: livello 40Immagine
Spoiler
Immagine
Immagine
Immagine
Immagine

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

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

Messaggio da Filo »

puoi ricorrere a un trucchetto da manuale: prima fai la room e con un codice speciale salvi tutte le coordinate di creazione in un file esterno all'exe. poi prendi le coordinate e le inserisci come codice... e poi... 1500x1500 non è moltissimo...

Avatar utente
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

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

Messaggio da maz85 »

Meno male che il topic raccoglie suggerimenti per l'ottimizzazione...
Se in una stanza ci sono x oggetti perchè dovrei distruggerli quando li ho messi nella creazione della stanza?
Piuttosto sarebbe più corretto creare x oggetti in base alla stanza evitando di creare quelli che non servono al livello.
Se poi Peppinoas intendeva durante una stanza eliminare gli sprite che non venivano usati beh, se si ha scelto di non averli in memoria (preload) questi sprite saranno un problema perchè devono ancora essere richiamati e caricati.

Avatar utente
Mrk
GMI Advanced
Messaggi: 1887
Iscritto il: 22/08/2009, 15:35
Specialità: Gameplay - Concept
Uso: GM:Studio 1.4 Standard
Contatta:

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

Messaggio da Mrk »

Scusate per la rianimazione del topic... però mi viene una domanda.
Sul manuale Mark Overmars dice di non abusarne, perchè l'evento Step rallenta notevolmente il gioco, perchè il gioco controlla ed esegue ogni step le azioni.
Come mai vedo che usate questo evento molto spesso? Se le azioni vengono messe dentro un if, il gioco subisce ugualmente un rallentamento?
Immagine

Il mio sito Mrk Play --- Profilo GameJolt
Admin Pagine GMI su Facebook (gmitalia) e Twitter (@GameMakerIta)

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

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

Messaggio da guidox »

Si è vero gli eventi step rallentano molto il gioco ogni secondo(dipende però da come setti) il gioco fa un continuo controllo!
Ma non credo ci sia un modo per fare diversamente!
Immagine

Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

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

Messaggio da BaronVsCorsar »

Mrk ha scritto:Scusate per la rianimazione del topic... però mi viene una domanda.
Sul manuale Mark Overmars (inchino) dice di non abusarne, perchè l'evento Step rallenta notevolmente il gioco, perchè il gioco controlla ed esegue ogni step le azioni.
Come mai vedo che usate questo evento molto spesso? Se le azioni vengono messe dentro un if, il gioco subisce ugualmente un rallentamento?
l'evento step rallenta in quanto è eseguito incondizionatamente ad ogni step.
Quindi il codice che è al suo interno viene eseguito sempre.
In un evento collisione il codice viene eseguito SOLO se hai collisione, quindi nella peggiore delle ipotesi crea rallentamenti occasionali.

Prendiamo per esempio una stanza con 1000 istanza di un oggetto, con del codice in step. Questo codice sarà eseguito ad ogni step.
Se togliamo l'evento queste 1000 istanze non rallenteranno assolutamente, e se hanno anche un evento collision solo occasionalmente questo verrà eseguito, e verosimilmente non per tutte e 1000 le istanze in una sola volta.
Magari ad ogni step ci saranno 10 collisioni... un bel risparmio!

Perchè noi usiamo spesso lo step? perchè a volte è indispensabile: il gioco prevede di fare qualche cosa anche se non ho collisioni, tasti premuti e così via. Bisogna sforzarsi di scrivere buon codice in modo che rallenti il meno possibile!
Più il gioco si fa complesso, e più diventa difficile gestirlo senza nessun evento step :sisisi:
Ricorda che uno step pesante in un oggetto "nemico" presente con centinaia di istanze influenza 100 volte di più dello step dell'oggetto controllore presente in singola istanza!
Se le azioni vengono messe dentro un if, il gioco subisce ugualmente un rallentamento?
solo per eseguire il controllo dell'if, ma non eseguendo il codice al suo interno il rallentamento è decisamente minore! Se si usa lo step va programmato con intelligenza. La struttura switch e if sono ottime per spezzetare (con pochi controlli) un codice lunghissimo che però riusulta eseguito non più di 10-20 comandi a step: ecco che minimizzo il rallentamento.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
fra3point
Membro attivo
Messaggi: 388
Iscritto il: 24/08/2010, 15:16
Specialità: Prog. e 3D Modelling
Località: L'Aquila
Contatta:

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

Messaggio da fra3point »

aspettate.. io un problema simile l'ho avuto.. cioè avevo messo per sbaglio in step un'azione abbastanza pesante (mi pare un create instance) che piano piano sovraccaricava la memoria e rallentava progressivamente il gioco.. e questo veniva ripetuto all'infinito.. ecco a volte questi rallentamenti potrebbero essere anche causa di errori come questo.. (oltre che ai caricamenti in sè per sè).. ;)
draw_text(100,100,"fra3point");

Progetti in corso:
Spoiler
Tuning Paradise --> 10%

Saw: The Game --> 60%

Tropic Races --> 40%

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

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

Messaggio da Jak »

fra3point ha scritto:aspettate.. io un problema simile l'ho avuto.. cioè avevo messo per sbaglio in step un'azione abbastanza pesante (mi pare un create instance) che piano piano sovraccaricava la memoria e rallentava progressivamente il gioco.. e questo veniva ripetuto all'infinito.. ecco a volte questi rallentamenti potrebbero essere anche causa di errori come questo.. (oltre che ai caricamenti in sè per sè).. ;)
1) questo topic è da un'anno che è morto
2) ma è ovvio che se creiamo delle istanze(che contengono variabili) si consuma la memoria, non ci vuole un genio. E comunque se uno deve creare queste istanze non cé nulla da fare. Qua si discute di metodi per migliorare l'ottimizzazione quindi quali cose è meglio fare piuttosto che altre non quali cose appesantiscono perché se uno deve bé...deve, non importa quante risorse usa.
Comunque sei stato troppo generico e non si capisce bene a cosa era dovuto il rallentamento quindi uno non se ne fa niente. ;)
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
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

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

Messaggio da maz85 »

Il topic può benissimo essere aggiornato tant'è che è pinnato.

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

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

Messaggio da Jak »

maz85 ha scritto:Il topic può benissimo essere aggiornato tant'è che è pinnato.
Sì lo so maz, ma non si capisce bene cos'è che fa rallentare e come risolverlo.
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: Rallentamenti: metodi, idee, soluzioni per snellire GM

Messaggio da cp94 »

ovvio che se metti un instance_create in uno step si rallenta, in un secondo infatti vengono create 30 istanze sovrapposte :roll:
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Avatar utente
Ghost
Membro super
Messaggi: 540
Iscritto il: 08/06/2010, 3:48
Specialità: Programmazione
Località: 63 69 76 69 74 61 76 65 63 63 68 69 61
Contatta:

Re: rallentamenti

Messaggio da Ghost »

Filo ha scritto:
masterchief ha scritto:ho messo un pò di objects ( non tantissimi ) e l'andatura del gioco si è rallentata notevolmente sapete darmi qualche consiglio?
game_process_priority(6) aumenta la priorità del gioco, così il computer impiega più memoria per quel programma, però se si blocca sono veramente cavoli
STEP EVENT:
if fps<5
game_end();

Avatar utente
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

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

Messaggio da maz85 »

Occhio, per un breve step è possibile che il pc vada sotto tot fps, ma dopo quello step vada a scheggia (magari per un caricamento o altro) quindi potrebbe uscire senza essere necessario.
Comunque resta una buona soluzione.

Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

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

Messaggio da cp94 »

si, di solito dopo un cambio room gli fps scendono a 9-12 (con un fade out in), non so se è la transizione o il cambio di per se...
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Avatar utente
Ghost
Membro super
Messaggi: 540
Iscritto il: 08/06/2010, 3:48
Specialità: Programmazione
Località: 63 69 76 69 74 61 76 65 63 63 68 69 61
Contatta:

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

Messaggio da Ghost »

maz85 ha scritto:Occhio, per un breve step è possibile che il pc vada sotto tot fps, ma dopo quello step vada a scheggia (magari per un caricamento o altro) quindi potrebbe uscire senza essere necessario.
Comunque resta una buona soluzione.
CREATE:
fpscounter=0;

STEP:
if fps<5{
fpscounter+=1;}

if fpscounter>10{
game_end();
}

Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

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

Messaggio da cp94 »

si, però ci devi aggiungere
if fps>25 if fpscounter>0 fpscounter-=1

edit: corretto, avevo messo al contrario ;)
Ultima modifica di cp94 il 03/09/2010, 12:31, modificato 1 volta in totale.
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Avatar utente
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

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

Messaggio da maz85 »

Nel senso che devi resettare il counter se il gioco si riprende quindi al massimo un -=1.

Avatar utente
Ghost
Membro super
Messaggi: 540
Iscritto il: 08/06/2010, 3:48
Specialità: Programmazione
Località: 63 69 76 69 74 61 76 65 63 63 68 69 61
Contatta:

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

Messaggio da Ghost »

vero, non ci avevo pensato xD

go71games
Membro
Messaggi: 74
Iscritto il: 26/07/2012, 10:56
Specialità: grafico
Contatta:

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

Messaggio da go71games »

ciao, mi permetto di dire la mia:
precaricare suoni e sprites aumenta la lentezza nel caricamento, ma una volta che il gioco è caricato dovrebbe girare a velocità normale.
ciò che rallenta, oltre a tutto quello che è stato detto sopra, è la cattiva programmazione.
man mano che il vostro gioco diventa più complesso, inevitabilmente vi troverete a gestire interazioni tra oggetti sempre + incasinate.
dato che siamo esseri umani e non macchine, commettiamo errori.
per esempio, nel costruire una espressione con IF con 2 condizionali ( if keyboard_check(vk_space) AND noammo=true, and esempio, e poi apriamo un altro IF sotto) , tendiamo a considerare solo le situazioni in cui il condizionale è vero e non il contrario.
è un cosiddetto cognitive bias, un errore sistematico. per saperne di più, Philip Johnson-Laird, per conoscere i principi di logica formale e come noi li sbagliamo spesso.
Quindi, pianificare il più possibile gli eventi STEP e le collisioni, come base di tutto.
ad esempio, invece di attribuire una collisione all'oggetto obj_player, posso attribuire la stessa collisione all'oggetto enemy, utilizzando la funzione OTHER. in questo modo GM si occuperà della collisione solo quando l'oggetto esiste.
insomma, secondo me programmare secondo logica evita di fare errori che creano loop, rallentano il gioco o creano istanze inutili.

inoltre consiglio - per le istanze che sono usate solo una volta - di caricare sprite e sonoro tramite le funzioni sprite_add and sound_add, di modo che quando l'istanza non serve +, si possono eliminare con sound_delete e sprite_delete. buttare via il superfluo!
liberare memoria il + possibile, anche utilizzando dll apposite, come cleanmem.dll, che si trova nel forum di yoyogames.

Avatar utente
zak84
Membro
Messaggi: 225
Iscritto il: 21/08/2012, 16:19
Specialità: Programmazione
Contatta:

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

Messaggio da zak84 »

ma set_program_priority è obsoleta :-| come faccio quindi?

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti