AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Shape Wars - Version 2.0.0
Thema durchsuchen
Ansicht
Themen-Optionen

Shape Wars - Version 2.0.0

Ein Thema von Edlmann · begonnen am 23. Mär 2011 · letzter Beitrag vom 17. Apr 2013
Antwort Antwort
Seite 18 von 36   « Erste     8161718 192028     Letzte »    
Edlmann
Registriert seit: 19. Nov 2010
Guten Nachmittag liebe DP,
ich hatte in letzter Zeit das dringende Bedürfnis, endlich einmal mit OpenGL ein fertiges Spiel auf die Beine zu stellen.
Fertig ist es noch nicht, aber Fertig ist ja auch definitionssache Es ist bisher mal Spielbar, auch wenn ich noch
einige Änderungen vorhabe.

Zur Spielidee:
Sinn hat dieses Spiel nicht, wie so viele Minigames. Der Spieler ist eine simple Figur, und muss andere
Formen abschießen. So simpel es sich anhört, ich spiele das Spiel mittlerweile mehr als dass ich es weiterentwickle
Das ganze Spiel ist im Tron-Stil gehalten, und mag dem einem oder anderem bekannt vorkommen, doch selber gemacht macht
ein Spiel imho immer doppelt so viele Laune wie runtergeladen
Die grünen "Dinger", die jeder Gegner fallen lässt, sind Multiplikatoren. Der Multiplikator bestimmt, wie viele Punkte man pro Gegner bekommt
(10 * Multiplikator), womit der Score gegen Ende stark in die Höhe schießt (In unserer Schule liegt der Record für Pacifism bei 50 Millionen)

Steuerung:
Bewegen kann man den Spieler mit den Tasten WASD wahlweise Pfeiltasten (funktionieren beide, aber am besten nicht gleichzeitig benutzen ^^), gezielt wird mit der Maus.
Mit der linken Maustaste kann man schießen.

Einstellungen etc:
F3: Screenshot machen, wird im Unterordner Screenshots erstellt
F5: Partikel an/ausschalten, sollte auf aktuellen Maschinen nicht nötig sein (In der Schule ist dies aber von Vorteil )
F6: Lichteffekte an/aus (sieht mit deutlich besser aus, aber wers lieber schlicht haben möchte...
F7: Equalizer im Hintergrund an/aus
F8: Fenstermodus/Vollbildmodus
F9: Joypad an/aus
Esc: Menü aufrufen (funktioniert nicht bei der Game-Mode-Auswahl)
X: Nächster Song
+ -: Lautstärke der Musik einstellen

Die verschiedenen Spielmodi:
On the Run: Nur relativ langsame Gegner, die dem Spieler folgen. Der einfachste Spielmodus bisher.
Moshpit: Alle Gegnerarten, die ich bisher implementiert habe, erscheinen zufällig. Meiner Meinung nach der schwierigste Modus, da man auf viele verschiedene Dinge achten muss.
Waves: Nur Gegner, die sich gerade über den Bildschirm bewegen, immer über die gesamte Bildschirmbreite. Man muss sich also einen Weg durch die Gegner bahnen, um hier zu überleben.

Download:
http://shapewars.sogru.de/download.php?id=0
Ohne Musik:
http://shapewars.sogru.de/download.php?id=1

Homepage:
http://shapewars.sogru.de

Dank an:
Sascha Willems für den OpenGL-Header der DelphiGL
Der Community der DelphiGL für ihre Tutorials
Jan Horn für seinen Texture-Loader
Den Machern der bass.dll/bass_fx.dll
1024MB (aka Leslie Wai) für einige der Songs
ParagonX9 und Kid2Will für einige der Songs
Culxxaw für das Bereitstellen von Server-Kapazitäten und das schreiben der nötigen .php-Scripte für den Online-Highscore
igel457 für seine Klasse zum Kapseln eines Gamepads (veröffentlicht hier)

Würde mich über Feedback, Verbesserugnsvorschläge etc freuen,
Und es wäre super wenn ihr mir Rückmeldung über die Performance geben könntet, die Partikel-Engine ist schon relativ aufwendig...
Vor allem das testen des Online-Highscores auf Bugsicherheit ist wichtig
Lg, Edlmann

Geändert von Edlmann (21. Sep 2011 um 21:31 Uhr)
 
EWeiss
 
#171
  Alt 14. Apr 2011, 21:01
Du meinst mit wechseln das einbinden.. hab ich verstanden
Das hat aber nichts mit dem einladen der Texturen ansich zu tun.
gruss
Es geht ja nicht um das Reinladen der Texturen. Das spielt performancetechnisch überhaupt keine Rolle, da dies ja nur 1x geschieht und nicht öfters!

xD
Wenn ich sie einmal eingeladen habe und einmal zugewiesen ist muss ich sie nicht jedesmal neu binden.
Irgendwie reden wir aneinandner vorbei meinen aber das selbe.

Zitat:
@EWeiss
Du weißt aber schon, dass Texturen auf den VRam geladen werden und wenn dieser Speicher nicht allzu groß ist, es zu Fehlern führen wird?
Heutzutage gibts noch Rechner, die < 64 mb Video RAM haben!

Wenn so ein AVI Video 24 Frames/Sekunde hat
Habe ich nicht da jede Texture (frame) nach gebrauch wieder freigegeben wird.
Ahjo und mein Video hat 32 Frames in der Sekunde sonst sieht das nix aus
Glaube mir ich habe 0% CPU auch wenn ich die neue Texture jedesmal neu einbinden muss (glBindTexture)

gruss
  Mit Zitat antworten Zitat
EWeiss
 
#172
  Alt 14. Apr 2011, 21:04
@EWeiss: Der GPU ist es doch egal, ob die Texturdaten aus einem JPG, einem PNG oder einem TGA stammen, denn der Texture-Loader wandelt sie ja in ein einheitliches Format.

Es sollte kein Problem sein, zumindest alle Sprites in eine Textur zu packen. Den Hintergrund kannst man ja meinetwegen in eine Extratextur packen. Aber auch so verringert sich die Anzahl der Texturwechsel erheblich.
Ich habe es anderes verstanden das du quasi ein png format in ein bitmap format einbinden willst und
aus diesem die Texture blitten willst.

Aber jetzt wird es langsam OT!

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

 
Turbo Delphi für Win32
 
#173
  Alt 14. Apr 2011, 21:14
Du meinst mit wechseln das einbinden.. hab ich verstanden
Das hat aber nichts mit dem einladen der Texturen ansich zu tun.
gruss
Es geht ja nicht um das Reinladen der Texturen. Das spielt performancetechnisch überhaupt keine Rolle, da dies ja nur 1x geschieht und nicht öfters!

xD
Wenn ich sie einmal eingeladen habe und einmal zugewiesen ist muss ich sie nicht jedesmal neu binden.
Irgendwie reden wir aneinandner vorbei meinen aber das selbe.

Zitat:
@EWeiss
Du weißt aber schon, dass Texturen auf den VRam geladen werden und wenn dieser Speicher nicht allzu groß ist, es zu Fehlern führen wird?
Heutzutage gibts noch Rechner, die < 64 mb Video RAM haben!

Wenn so ein AVI Video 24 Frames/Sekunde hat
Habe ich nicht da jede Texture (frame) nach gebrauch wieder freigegeben wird.
Ahjo und mein Video hat 32 Frames in der Sekunde sonst sieht das nix aus
Glaube mir ich habe 0% CPU auch wenn ich die neue Texture jedesmal neu einbinden muss (glBindTexture)

gruss
Nun, das hat nichts mit der CPU, sondern GPU Auslastung zu tun.
Weiters - so schätze ich mal - gibts bei dir höchstens 32 Texturewechsel / Sekunde.
Bei Spielen kann diese Zahl locker 4 bis 5 oder mehr Stellen annehmen!
  Mit Zitat antworten Zitat
EWeiss
 
#174
  Alt 14. Apr 2011, 21:36
Zitat:
Nun, das hat nichts mit der CPU, sondern GPU Auslastung zu tun.
Weiters - so schätze ich mal - gibts bei dir höchstens 32 Texturewechsel / Sekunde.
Bei Spielen kann diese Zahl locker 4 bis 5 oder mehr Stellen annehmen!

Korrekt will da nicht widersprechen..

gruss
  Mit Zitat antworten Zitat
Edlmann
 
#175
  Alt 15. Apr 2011, 12:33
Wenn du die Texture an einer liste bindest so wie ich das mit meinem TextureLoader (Array of Texture) mache
spielt die performance keine rolle wenn es dir um geschwindigkeit geht da diese zur jeder zeit abrufbar sind.

Beim Textureloader von Sulako bist du nun mal gebunden und kannst nicht mal so einfach eine Texture unmerklich wechsel.
Warum willst du hier was vergleichen du gibst einfach die Texture im Array an und fertig.

Um Texturen einzuladen benötigst du keine CPU.. bzw .. hast keine CPU auslastung.
In meinem Plugin verwende ich (mit meinem Textureloader) eine AVI Datei wo jedes Frame
einzeln in eine Texture gewandelt wird und das in Realzeit.

CPU := CPU <> 0

PS:
Das AVI ist 24MB groß da kannst dir vorstellen wieviele Frames dort enthalten sind.
gruss
Naja, ich meinte das ganze so, dass ich all meine Gegner in einer einzigen Liste habe, und diese beim Rendern halt durchgehe. Und mit wenigen Texturwechseln muss ich diese Liste halt 5x durchgehen => Mehr CPU-Auslastung, mit vielen TexturWechseln nur einmal => Mehr GPU-Auslastung.

Grundsätzlich sollte man Texturewechsel immer meiden. Dein Code sollte darauf ausgerichtet sein, dass er gleich mit einem Durchlauf alles ohne Texturwechsel zeichnen kann.
Dh. gruppiere einfach Entities mit der gleichen Texture ID ala~
Delphi-Quellcode:
TTextureEntities = record
  TextureID: DWord;
  Entities: Array of Pointer; // Pointer = Klasseninstanzen
end;

// oder noch besser

TTextureEntities = class(TList)
public
  property TextureID: DWord; // strg+shift+c
  procedure Render();
end;
{Items[] beinhaltet dann die Instanzen; per Add/Delete/... kann es nun verwaltet werden}
EDIT:
@EWeiss
Du weißt aber schon, dass Texturen auf den VRam geladen werden und wenn dieser Speicher nicht allzu groß ist, es zu Fehlern führen wird?
Heutzutage gibts noch Rechner, die < 64 mb Video RAM haben!

Wenn so ein AVI Video 24 Frames/Sekunde hat und eine Länge von etwa 1 Min und pro Frame etwa eine Auflösung von 640*480*3 (RGB; unkomprimiert 900kb; komprimiert ~ 80 kb [JPEG Komprimierung]), dann wären das etwa 80 * 24 * 60 ~ 112,5 mb.

Damit hättest du ein Problem!
Stimmt, ist mir auch schon eingefallen, dass man einfach verschiedene Listen machen kann...werd ich glaub ich einfach so machen, das dürfte das optimierteste sein
Und die Klasse TList benutze ich ja jetzt schon, bloß halt eine lange Liste mit allen Gegnern, egal welcher Typ.

die auch schon etwas weiter gehen als das was man auf DGl lernt
Bist du sicher, dass du über die DGL-Wiki hinaus bist

Aber Gruppieren sollte geht sicher in die richtige Richtung.
Wie wäre es mit unterschiedlichen Listen für die Gegner?
Sagen wir ich habe mir die DGL-Wiki komplett durchgelesen bzw sie komplett durchgearbeitet, und konnte mir dieses Frage nicht selbst beantworten.
Wie schon oben gesagt, es wird auf mehrere Listen hinauslaufen.

@Mleyen: Leider ja, doch ich finde den Fehler dabei auch nicht. Zur Textdarstellung benutze ich im Moment die Textsuite, was ja so ziemlich das beste ist, was es im Moment gibt. Aber ich überlege sowieso das ganze auf eine deutlich simplere (im Quelltext implementierte) Vektorfont umzustellen, dann dürfte dieses Problem Geschichte sein.

[Edit]
o_o da war ja noch eine ganze andere Seite mit Diskussionen zu dem Thema ^^
Aber ich denke mal zu dem Thema ist alles gesagt, es ging mir bei der Frage eig nur darum die Aufrufe von glBindTexture zu minimieren, das Laden geschieht ja nur einmal am Anfang (alles andere wäre ziemlich sinnlos ^^). Ich werds einfach auf mehrere Listen umstellen, sollte dann das Beste sein.
[/Edit]

Geändert von Edlmann (15. Apr 2011 um 12:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

 
Turbo Delphi für Win32
 
#176
  Alt 15. Apr 2011, 13:25
Kanns kaum abwarten
  Mit Zitat antworten Zitat
Edlmann
 
#177
  Alt 15. Apr 2011, 14:59
Kanns kaum abwarten
Was jetzt genau?

Ach ja, ich werd übrigens bald (spätestens wenn ich nen neuen Gegner drinne habe) den Highscore zurücksetzen, da die Highscores von da aus älteren Versionen stammen und mit der aktuellen Version kaum noch schaffbar sind (sorry mleyen )
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

 
Turbo Delphi für Win32
 
#178
  Alt 15. Apr 2011, 15:00
Dass die Partikel effizienter gezeichnet werden. Ich kanns mit Partikeln gar nicht spielen, deshalb schalte ich das immer ab!
  Mit Zitat antworten Zitat
Edlmann
 
#179
  Alt 15. Apr 2011, 15:12
Dass die Partikel effizienter gezeichnet werden. Ich kanns mit Partikeln gar nicht spielen, deshalb schalte ich das immer ab!
Da muss ich dich leider enttäuschen, an den Partikeln habe ich schon so viel wie möglich gemacht...aber du kannst ja einfach in der Settings.ini die Partikelanzahl runtersetzen so mit etwa 80 sieht es auch noch gut aus (300 ist normal).

Woran ich gerade schraube ist die Effizienz der Gegner ^^
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch
 
#180
  Alt 15. Apr 2011, 16:46
@Edlmann: bloom effekt kennst du nicht?(oder hab ich mich falsch ausgedrückt?).
Wenn du auf deine Gegner/Effecte Bloom anwenden könntest, würden dieObjecte aussehen, als wenn sie aus Laserlicht wären. War bei GW:Evolved glaub ich auch, muss nochmal gucken.
War nen netter effect^^.

PS: Vllt könnte man anstatt x partikel. MAX partikel setzen. So das nur eine gewisse maxgrenze partikel sichtbar sein darf, ansonsten werden ältere aprupt entfernt. Und mit der MAxzahl kann man dann noch schön performance testen

MFG
Memnarch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 18 von 36   « Erste     8161718 192028     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
C-Sharp-Forum.de - Shape Wars - Version 0.9.9 This thread Refback 11. Apr 2011 15:31
Delphi-Forum.de - Shape Wars - Version 0.9.9 This thread Refback 7. Apr 2011 17:55

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz