Skocz do zawartości

Dokładna optymalizacja


Lucaser

Rekomendowane odpowiedzi

Witam

 

Chciałbym dokładniej poruszyć temat optymalizacji gier w GM, głownie chodzi mi o przyspieszenie gry, szybsze uruchamianie, co wpływa na spadek fps itp. Co ma jaki wpływ na działanie gry i jakie są sprawdzone sposoby na zoptymalizowanie, czy jakieś rozszerzenia czy coś. Wiem że ten temat był wiele razy wałkowany na forum ale mi zależy na dokładniejszym opisie, szkoda też że ktoś z odpowiednią wiedzą nie pokusił się napisać artykułu na ten temat.

Odnośnik do komentarza
Udostępnij na innych stronach

Unikaj dużych spritesów. Jeśli już muszą być duże albo duża ich ilość korzystaj ze skryptu, który ładuje je(tylko te potrzebne w danym momencie) z zewnątrz. To samo z dźwiękiem.

 

Jak masz jakieś wyliczanki typu:

if image_index > 5 and image_index < 7{bla =5}

 

To Ci napiszę jak to zoptymalizować.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
Jak masz jakieś wyliczanki typu:

 

 

To Ci napiszę jak to zoptymalizować.

Akurat na tym za dużo wydajności nie zyskasz, to zwykłe porównanie dwóch zmiennych, prawie nic. Co innego rysowanie, particlesy, tworzenie obiektów i inne cuda niewidy.

Jakiś gnysek, czy borek, którzy robią duże projekty mogliby art napisać o optymalizacji w gmie. Chociaż przed nową wersję, która ma dużo zmienić w tym zakresie nie wiem czy jest sens.

Odnośnik do komentarza
Udostępnij na innych stronach

Chodziło mi o to że jak byłem początkujący to robiłem dużo if'ów a można tak:

 

w create:

 

pre_bla[1]=45

pre_bla[2]=46

 

i tak dalej

 

w step:

 

r_image_index = round[image_index]

 

bla=pre_bla[r_image_index]

 

Nie wiem czy dobrze to tłumaczę, ale chyba autor i tak się zwinął.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
Chodziło mi o to że jak byłem początkujący to robiłem dużo if'ów a można tak:

 

 

 

 

 

Nie wiem czy dobrze to tłumaczę, ale chyba autor i tak się zwinął.

I jak to się ma do dużej ilości ifów? Nie wiem do czego ty je wykorzystywałeś.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
Nic nowego się nie dowiedziałem, mniejsze grafiki czy dezaktywacja obiektów to już wiem, chodzi mi o jakieś inne sposoby, konkrety przykłady, porównania jakieś sposoby przyspiesznia, chce by moja gra była zoptymalizowana na 100 %

Musisz cały swój kod przejrzeć, każdą linijkę przeanalizować i pomyśleć, czy się na czymś nie da zaoszczędzić.

 

Na koniec i tak stwierdzisz, że prawie nic to nie zmieniło, ale tu niestety wina stoi po stronie twórców gma.

Odnośnik do komentarza
Udostępnij na innych stronach

Nic nowego się nie dowiedziałem, mniejsze grafiki czy dezaktywacja obiektów to już wiem, chodzi mi o jakieś inne sposoby, konkrety przykłady, porównania jakieś sposoby przyspiesznia, chce by moja gra była zoptymalizowana na 100 %

 

Algorytmika, powiadam! Algorytmika, towarzyszu!

Odnośnik do komentarza
Udostępnij na innych stronach

W pewnych przypadkach stosowanie surfaces przyspiesza działanie. Wyświetlanie tekstów też potrafi spowolnić, ja swego czasu podczas przerabiania moich starych wypocin z gm4 do gm7 i 8 w pewnym momencie stanąłem przed problemem takim że gry wcześniej działające na 30fps osiągały nagle 3-5fpsów na słabych komputerach (netbook z marną grafiką). Po odpowiedniej optymalizacji spadki są tylko w momencie gdy dużo się dzieje na ekranie a wystarczyło tylko pomyśleć aby wyświetlać teksty nie co krok a tylko w momencie gdy te teksty się zmieniały (np. zmiana punktacji). Także niepotrzebne tworzenie obiektw, które służyły tylko do wyświetlania grafiki a wystarczyło użyć draw_sprite w jednym obiekcie który odpowiada tylko za rysowanie. Pomijam drobiazgi o których też warto pamiętać np. i=i+1; zastąpić przez i+=1; choć różnicy pewnie nie zauważysz ale jak to mówią ziarnko do ziarnka itd.

A z gotowych artykułów znalazłem kiedyś taki

Także ładowanie dużych grafik tła w jednym kawałku wymaga odpowiedniej ilości pamięci graficznej i na komputerach ze słabą grafiką gra się albo nie uruchamia albo część tła się nie wyświetla więc warto np. podzielić tło przy dużym roomie na kawałki i ładować je w momencie kiedy są widoczne. Jedynie nie jestem pewny czy trzymane grafiki w exe są na dzień dobry ładowane do pamięci graficznej czy dopiero w momencie użycia więc najlepiej wczytywać je z plików wg aktualnych potrzeb.

 

EDIT:

Przykładowo ostatnie moje testy przeprowadziłem na 3 komputerach:

A. C2D E8600 3,33GHz, 4GB RAM, GF 8800GTS 512MB

B. Netbook Intel Atom 1.6, 1GB RAM, Intel GMA 500 (na sterownikach alternatywnych do grafiki dynamiczny przydział do 128MB RAMu, na oryginalnych do 8MB ale testy robiłem na alternatywnych)

C. Cel 2GHZ, 2GB RAM, GF2 MX 400 (64MB RAM)

 

Dodatkowo włączony vsync (global game settings >> resolution >> drugi haczyk) co może mieć duży wpływ (niekorzystny) na FPS ale nie miało wpływu na samo ładowanie gry i wyświetlanie tła

 

Dla gry z roomem 2500x3000, view 1024x768, grafika tła w jednym dużym kawałku (jpg) zapisana w exe, na ekranie aktywnych raptem 5 obiektów:

A. Wszystko działa bez problemów z FPS 60,

B. Gra odpala ale zamiast tła jest biały ekran (rysowanie koloru tła wyłączone), fps ok 45-50

C. Gra wcale nie odpala

 

Dla tego samego rooma, tło podzielone na kawałki o wymiarach 2500x800 ładowane po jednym z pliku (dynamicznie nakładana na room w odpowiednich miejscach)

A.Bez problemów,

B. Odpala ale wciąż brak tła (tym razem jest czarny kolor tła), fps podobnie (45-50)

C. Gra odpala, pokazuje się tło ale jakieś 250-300px pod koniec tła (przy prawej krawędzi ekranu) pojawia się "rozmycie" coś jak efekt gdy czasem zawiesi się okno windowsa którym można "malować po ekranie", prędkość 57-60fps.

 

Ten sam room, tło podzielone na kawałki o wymiarach 1250x800, ładowane jako DWA osobne kawałki ładowane z pliku i układane na roomie obok siebie za pomocą 2 różnych backgroundów (na razie oba visible niezależnie czy są już wyświetlane w view czy nie.

A. Bez problemów

B. Odpala, jest tło wyświetlane prawidłowo, gra działa ale nieco wolniej niż bez tła (35-45 fps)

C. Gra działa z prędkością 57-60fps, tło wyświetla się wszędzie prawidłowo.

 

Pozostaje mi jeszcze tylko sprawdzić czy będzie jakaś różnica na niekorzyść jak najpierw zdefiniuje te kawałki tła na stałe i zapisze w exe.

 

Czyli prosty zabieg podzielenia tła na mniejsze kawałki i wyświetlanie tylko tych które są widoczne, powoduje duże oszczędności i wręcz umożliwia samo uruchomienie. Oczywiście jeszcze pytanie kto dziś używa sprzętu typu C ale już sprzęt typu B to popularny netbook (nie mylić z notebookiem) z zeszłego roku.

Odnośnik do komentarza
Udostępnij na innych stronach

na dzień dobry ładowane do pamięci graficznej czy dopiero w momencie użycia

To zależy czy dany sprit ma zaznaczone 'preload textures' czy nie. Z tym że w GM8 tej opcji już nie ma. Może z poziomu gml da się jeszcze to ustawiać ale nie jestem pewny.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...