Arcade Blues ha scritto:Generalmente quando le prestazioni contano gli array multidimensionali nn andrebbero usati.
E' molto piu' efficiente indicizzare le coordinate x e y all' interno di un array lineare o almeno lo è in qualsiasi linguaggio che abbia mai provato.Non so dirti in gml perchè uso gli array in modo marginale preferendo a loro le grid a mani basse.
Dipende molto dall'implementazione, nei linguaggi compilati classici e vecchi non cambia assolutamente nulla in quanto usano l'implementazione più ovvia ossia lo stesso calcolo matematico che faresti tu a mano.
Certo dipende anche molto da come li utilizzi e della capacità di un compilatore di ottimizzare il determinato caso.
Bisogna comunque considerare la facilità e chiarezza del codice, di rado le prestazioni servono a tal punto da fare un castrone illeggibile.
Arcade Blues ha scritto:anche nelle grid uso le coordinate monodimensionali utilizzando la seconda dimensione per simulare a piacimento un array di strutture o una struttura di array con enum come da esempio di Tizzio con le ds_list tranne che con le grid dove "il doppio reindirizzamento è nativo"(lo so suona malissimo).
Anche qui dipende dal caso, ora non ricordo esattamente il risultato dei miei infiniti test ma una list è comunque di gran lunga più veloce da leggere di una grid quindi per grid che hanno una seconda dimensione non conviene. A patto che la utilizzi per intero chiaramente e non elementi sporadici ogni tanto quindi ricade nuovamente sulla scelta in base al caso.
Inoltre le ds_list possono contenere array quindi anche quella è un'implementazione da non sottovalutare essendo gli array notevolmente più veloci delle ds.
Arcade Blues ha scritto:Come regola generale se un implementazione sfrutta una o piu' funzioni native di Game maker questa sara necessariamente piu' veloce di un elaborata implementazione in gml a meno che l'algoritmo che tu usi non sia drasticamente migliore di quello basato sulle funzioni native(possibile ,ma difficile e probabilmente ti trovi di fronte a qualcosa che nn andrebbe fatta in gml.
Le chiamate a funzione in game maker sono molto lente, anche non avendo un'algoritmo più performante molte operazioni semplici, principalmente relative alla matematica, potrebbero essere più veloci con del codice inserito manualmente piuttosto che il solo richiamo di una funzione risultando quindi più veloce anche se l'esecuzione in se della funzione è sempre più veloce come dici tu.
Arcade Blues ha scritto:E' bene ricordare che qualsiasi codice scriverai anche compilato in yyc non sarà mai a velocità native basta considerare che ycc in molti casi è piu' lento di javascript(es. gli array sono drasticamente piu' veloci in html5 che in ycc e penosi in gml interpretato) quindi le grid da quel punto di vista le preferisco in quanto offrono prestazioni comparabili su tutte le piattaforme.
Questo è interessante, non ho mai provato il modulo html5 ma ho sempre notato che il javascript è piuttosto lento in esempi e giochi vari sul web mentre i miei test di game maker senza yyc (quindi interprete) con le ultime versioni mi davano come risultato che variabili ed array erano pressochè gratuite ed infinitamente migliori rispetto alle ds, velocità neanche lontanamente paragonabili. Resta comunque il fatto che appunto non ho mai usato yyc (perchè buggo) e quindi non sono mai incappato in drastici cambiamenti di velocità che magari fanno l'esatto contrario per quanto riguarda le prestazioni (chiamate a funzione e ds veloci, array lenti e tutto ciò di cui parli).