Spiele optimieren
Der Grund warum ich dieses Tutorial schreibe ist ein ganz simpler.
Es gibt noch kein deutsches Tutorial zum Thema: Spiel optimieren.
Nachfolgend will ich euch ein paar Tips geben wie ihr euer Spiel optimieren könnt.
Inhalt
Auflösung verringern
Farbtiefe reduzieren
Bilder "beschneiden"
Formate (Bilder)
Nicht immer Sprites als Text
Statt hunderte Sprites als Hintergrund lieber Tiles
Sounds "beschneiden"
Das Format (Sound)
Häufige Funktionen als Skript
Großes Skript --> mehr Kleine
Viel IF --> SWITCH
So wenig Objekte wie möglich
Performance Verbesserung
Nicht zu große Räume
Dateien extern laden
Doppelten Code vermeiden
Bevor man die Exe erstellt...
Exe packen
Auch auf schwächeren PC's testen
DLL's verwenden
1. Bilder
Bilder sind mit das Herzstück eines Spiel's und wir alle nehmen nicht zu knapp von ihnen gebrauch.
Doch oft wird dadurch die .exe nur unnötig vergößert.
Hier folgende Tips:
- Auflösung verringern
Nun gut da könnt man sagen aber wenn ich es verringer wird auch das Bild kleiner.
Nun dieser Tip sollte nur angewand werden wenn man zu große Bilder hat.
Ein 1024x800 Bild als Hintergrund muss es ja nicht sein es reicht auch ein
800x600 ;)
Dazu noch ein Tip: Die Auflösung die ihr im GM einstellt sollte nicht zu hoch sein.
meistens sollten 800x600 reichen.
- Farbtiefe reduzieren
Das wohl beste Mittel gegen große Bilder.
Dazu ein Test:
Hier ist ein Bild im .bmp Format:
(Das Bild wird hier verkleinert dargestellt)
Das Bild besitzt 16,7 Millionen Farben.Und ist 2,25MB schwer.
Doch soviel braucht das Bild nun wirklich nicht.
Man nehme sich das Programm IrfanView (www.irfanview.com)
Man lade das Bild mit IrfanView.
Dort bei Bild --> Farbtiefe reduzieren.
Nun muss man gucken wieviel Farben man dem Bild lässt.
In unserem Fall reduzieren wir es auf 256 Farben.
Bei 16 Farben würde es unschön aussehen.
Man sollte bei jedem Bild schauen ob man noch weiter senken kann.
Manchmal reichen auch nur 16 Farben was das Bild noch kleiner werden lässt.
So nun nachdem wir das Bild wieder als .bmp speichern sehen wir.
Es ist nur noch 769KB groß! Ein unterschied von von 1535KB!
Jetzt könnte man noch den oberen Tip anwenden und die Auflösung reduzieren.
Mit 800x600 ist es 469KB groß.
Mit 640x480 ist es 301KB groß.
Das könnte man nun noch weiter senken aber dann wirds ja schon fast zu klein ;) .
- Bilder "beschneiden"
Oft sind bei Bildern noch kleine Reste die nicht benötigt werden.
Wie man sehen kann sind dort völlig überflüssige Kanten.
Diese kann man aber ganz leicht entfernen.
Dazu benötigt man lediglich den GM internen Bildeditor.
Man geht dort auf Edit Sprite dann in der Leiste
Images --> Crop...
Border sollte man auf 1 lassen.
Bei großen Bilder kann man viele KB's sparen!
In diesem Fall:
Original: 26,5KB
Danach: 6,55KB
Unterschied: 19,95KB
Dadurch hätten wir wieder etwas Platz gespart.
Man sollte sich angewöhnen garnicht erst solche großen frei stellen zu haben.
Dann brauch man auch später nicht alles müselig wegschneiden ;)
- Formate
Wenn man sich es so durchliest fragt man sich bestimmt:
Warum zum Teufel nimmt er .bmp und nicht z.B. .png?
PNG ist doch viel kleiner?!
Stimmt PNG ist kleiner aber nur außerhalb des GM.
Den der GM wandelt alles in ein einheitliches Format um,
wodurch der Gewinn wieder verloren geht.
Man sollte also möglichst BMP als Format verwenden.
JPG's kann ich nicht empfehlen da sie keine Vorteile bringen.
Höchstens den Nachteil das das Bild Artefakte(Bildfehler) besitzt.
Das hier geschriebene bezieht sich nur auf den GM!
Natürlich machen sich bmp schlechter als png, aber nicht in
Verbindung mit dem GM.
- Nicht immer Sprites als Text
Man sollte wen möglich die Funktion des GM nutzen.
Man kann mehrere KB sparen wenn man statt Sprites die nur Text haben,
die Draw funktion des GM nehmen den Code verbraucht wesentlich weniger
KB als Sprites.
Beispiel:
Wir haben einen Dialog zwischen 2 Leuten (im GM) jeder bekommt 5 Sprechteile.
Macht zusammen 10 das heißt 10 Sprites alleine nur für diesen Dialog.
Wenn man dort die Draw Text funktion des GM's nutzt kann man sich einigen
aufwand fernhalten. Außerdem kann so ein Rechtschreibfehler wesentlich schneller
ausgebessert werden wenn auch nur ein Fehler bei einem der Sprite "Texte" ist
müsste man ein neues Bild machen wieder den Text, diesmal richtig, reinschreiben.
Und schließlich wieder in den GM einbauen. Da hat mans mit der Funktion wesentlich einfacher ;)
- Statt hunderte Sprites als Hintergrund lieber Tiles
Wenn man sich ne schöne Landschaft basteln will sollte man von Tiles gebrauch machen.
Statt 20 Objekte ohne code auszustatten um einfach nur die Leinwand zu "tapezieren" sollte man
sich nen Background machen dort alle Sprites die man brauch richtig anordnen und dann als Tileset im
GM einlesen.
Mit ihnen kann man nun sich nen Hintergrund zusammensetzen.
So das sollte eigentlich für den Bereich Bilder reichen.
Der zweite Bereich ist der Sound Bereich dort kann man allerdings nicht so viel
optimieren wie bei den Bildern.
2. Sounds
- Sounds "beschneiden"
Soll heißen unnötiges am Anfang und Ende wegschneiden.
Beispiel:
Am Anfang sind 3 Sekunden ohne Sound und am Ende nochmal 5 Sekunden.
Macht zusammen 8 Sekunden unnötiges, weil dort ja kein Sound ist.
- Das Format
Das bestmöglichste Format lautet: MIDI oder MID.
Dieses Format kann zwar nur Töne wiedergeben das reicht aber in den
meisten Fällen.
Ungünstig sind Wav und MP3, wobei WAV noch besser ist als MP3.
Wav ist größer als MP3, schonmal schlecht.
Da könnte man sagen dann ist doch MP3 besser!
Stimmt aber nicht.
MP3 ist zwar kleiner aber der GM muss MP3 erst encodieren.
Das heißt es wird mehr Rechenkapazität gebraucht, was das
Spiel langsamer werden lässt.
Wav dagegen ist in Sachen Performence besser.
Allerdings macht die Größe zu schaffen.
Deshalb am besten Midi klein und schnell ;)
So mehr kann man dazu eigentlich nicht sagen.
So nun kommen wir zu den anderen diverseren Themen.
3. Diverses
- Häufige Funktionen als Skript
Wenn man mal wieder codet und codet, dann macht man manchmal fehler.
Einige machen oft in ein Objekt immer ein und das selbe.
Das heißt man sollte häufig auftretende Kurzskripte oder Funktionen.
In ein Skript legen.
Das hat den Vorteil das man nur einmal was ändern muss ;)
Außerdem wird dadurch wieder code gespart.
Ob dies nun zu einer schnelleren Performance dient kann ich nicht sagen.
- Großes Skript --> mehr Kleine
Man sollte wenn es geht ein großes Skript in 2-3 kleine einteilen.
Das heißt gewünschter Code wird auch nur dann ausgeführt wenn er
ausgeführt werden soll.
Bei einem großen muss das komplette Skript durchgegangen werden.
- Viel IF --> SWITCH
Es kann passieren, häufig bei Anfängern, das man viele IF abfragen hat.
Wenn sich dies nur auf ein Sache bezieht, bringt SWITCH mehr.
Beispiel:
if variable1==1
TU DIES
if variable1==2
TU DIES
else
TU DIES
Und so weiter...
Dafür sollte man Switch verwenden:
switch (varible)
{
case 1: TU DIES
break;
case 2: TU DIES
break
deafult: TU DIES
}
Das bringt eine klein wenig Performance und Übersichtlichkeit.
Veranschaulichung:
Bei IF
Er öffnet das erste if - mist die Abfrage ist es nicht.
Er öffnet das nächste - mist auch nicht
Und so weiter das heißt er muss müselig alles überprüfen.
Bei switch
Er öffnet switch
Guckt 1-nicht, weiter 2-nicht, weiter ....
Und so weiter das heißt er muss nur einmal "öffnen" und kann dann
überprüfen.
- So wenig Objekte wie möglich
Je mehr Objekte sind desto mehr muss geladen werden.
Das heißt je weniger desto besser.
- Performance Verbesserung
Am meisten Performance bekommt man wenn man seinen Code verbessert.
Glaubt mir oft findet man Sachen die man viel einfacher,unkomplizierter lösen
kann. Das bringt mit am meisten.
- Nicht zu große Räume
Man sollte nicht mit der Größe der Räume übertreiben.
Beispiel:
Ein Raum hat 3000x3000 aber tatsächlich werden nur 2650x2780
gebraucht, sollte dies der Fall sein sofort kürzen ;)
- Dateien extern laden
Wenn man sein Spiel etwas verschnellern will sollte man die Dateien extern speichern.
Und nur bei Bedarf laden.
Beispiel:
5 Sprites werden nur einmal während des gesamten Spiels gebraucht diese Lädt man wärend man
den Raum betritt, nachdem das Level geschafft ist werden sie nicht mehr gebraucht und man kann
sie wieder löschen somit spart man Ram weil sich die Sprites nicht mehr in ihm befinden.
Noch ein Nebeneffekt ist es, dass das laden am Anfang verringert wird.
- Doppelten Code vermeiden
Oft hat man Objekte die genau die gleichen Events wie ein anderes haben sollen.
Nun denkt man sich "Mist muss ich alles da nochmal reinpfeffern".
Aber da gibts ne viel bessere Lösung.
Das Objekt das genau die gleichen Events haben soll wie ein anderes stellt man so
ein das es als Parent das Objekt hat welches schon die Events besitz.
Es werden dann alle Events auch für dieses Objekt genommen.
Dadurch spart man sich viel Doppeltes.
- Bevor man die Exe erstellt...
Sollte man überprüfen ob nicht noch irgendwo unnötiges im Spiel ist.
Z.B. unnötige Sprites,Backgrounds,Objekte.
Sollte aber nicht alzuoft auftreten.
- Exe packen
Man sollte seine fertige Exe mit einem Archivierungsprogramm packen.
Bespielsweise mit Zip, Rar, oder 7zip.
Welches man wählt ist einem selbst überlassen.
Man sollte aber beachten das vielleicht nicht alle 7zip oder Rar haben.
Wenn man universell sein möchte sollte man Zip wählen den heutzutage
hat eigentlich fast jeder Zip. Win XP z.B. besitz eine interne Funktion um es
zu entpacken man braucht also nichtmal das Zip-Programm.
- Auch auf schwächeren PC's testen
Man sollte bevor man sein Programm öffentlich macht überprüfen
wie viel das Spielt braucht um ordentlich zu laufen.
Den es gibt auch welche mit schwächeren Pc's die dein Spiel spielen wollen ;)
Am besten verschiedene Version anbieten.
Welche die nicht so stark belastend sind z.B. welche ohne Effekte.
Oder man macht Einstellmöglichkeiten in sein Spiel.
- DLL's verwenden
DLL's können auch noch einmal Performance bringen.
Da der GM bestimmte Sachen nicht schnell genug hinbekommt.
Dann sollte man eine DLL verwenden.
Auch wird der GM durch DLL's erweitert.
Erweitert in dem Sinne das ihm mehr
Funktionen zur Verfügung stehen.
So gibt es z.B. DLL's mit dennen man per GM ZIP Dateien entpacken kann.