![]() |
Re: Eigene einfache 2D Grafik Engine
Naja, was soll deine Engine denn leisten? Nur, dass sie nicht direkt auf die PaintBox zeichnet, sondern erst auf ein Bitmap? Dafür brauchst du keine Engine
|
Re: Eigene einfache 2D Grafik Engine
Also ich hab mir vor kurzem (für meine Firma) eine recht performante Engine gebastelt die wie folgt funktioniert.
Ich habe eine Anzeigefläsche (Display) worauf später das fertige Bild kommt. Wenn irgend ein Object neu gezeichnet werden muss teilt dieses Object dem Display mit das es neu gezeichnet werden müsste. Das Display hat einen Timer in dem geprüft wird ob seit dem letzten malen 40ms vergangen sind und prüft ob überhaupt ein neuemalen erforderlich ist (ob also irgend ein Object das malen Flag gesetzt hat). Nur wenn mindestens 40ms vergangen sind und das Malenflag gesetzt ist ruft das Display von allen Objekten die Malen-Methode auf und übergibt ein Bitmap worauf gemalt werden muss. Wenn also kein Object ein neu malen braucht bleibt das Display auch unverändert und die cpu-last sinkt auf 0%. Zusätzlich wird im Paint des Displays noch das Bitmap (worauf die Objecte gemalt haben) ausgegeben. Auf diese Art und Weise habe ich locker über 100 Frames pro Sekunde geschaft (die 40ms heruntergesetzt zum test). Das war jetzt nur grob umrissen wie man sowas machen kann. In meinem speziellen Fall sorgt das Display auch dafür das ebenen welche auf der Z-Achse weiter hinten leigen als erstes gemalt werden etc. |
Re: Eigene einfache 2D Grafik Engine
Image32 ist auch noch ein bissel schneller, gab hier in Forum schon ein paar Anwenungen die das benutzt hattenund gut liefen :)
mfg, Björn |
Re: Eigene einfache 2D Grafik Engine
Zitat:
Zitat:
|
Re: Eigene einfache 2D Grafik Engine
[quote="Cöster"]
Zitat:
Zitat:
Es geht also nur darum das man die Ausgabe auf den Bildschirm aufs nötigste begrenzt und nicht bei jeder miniänderung gleich das gesammte Bild ändert. |
Re: Eigene einfache 2D Grafik Engine
Zitat:
Da sich die CPU ohnehin so gelangweilt hat, war ich damals zu faul, da eine Optimierung einzubauen :???: |
Re: Eigene einfache 2D Grafik Engine
ich mache das so:
ich habe eine paintbox und eine liste alle objekte die ich zeichnen muss/möchte nun habe ich eine draw procedure die in zwei hälfe aufgeteilt ist: isdraw auf drue wird alle komplet neu gezeichnet. ist istDraw auf false wird nur noch das neugezeichet was sich geändert hat. und ich verwende nur noch windows botschaften und habe dort eine zeitschleife eingebaut so habe ich es geschaft das die listbox die ich gezeichnet habe fast in "echtzeit" reagiert und das bei minimaler cpu auslastung*freu*. |
Re: Eigene einfache 2D Grafik Engine
Ansonsten ist es auch möglich mit der Scanline Eigenschaft zu arbeiten.
Da kriegst Du die Speicheradresse des Canvas Objektes und kannst dort direkt zeichnen. Is meiner Erfahrung nach die schnellste Methode... |
Re: Eigene einfache 2D Grafik Engine
Zitat:
|
Re: Eigene einfache 2D Grafik Engine
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
Also nach euren Antworten habe ich mich entschieden einfach mal meine eingene kleine Engine zu Basteln und schaun was rauskommt. Das Ergebniss war super :-) Die eigene Engine funktioniert ganz simpel: Auf einen Bitmap wird im Hintergrund alles gemalt und dann wird alles auf eine PaintBox kopiert. Ich habe euch alle 3 Versionen zum Testen bereitgestellt. Achtung: Das Spiel Ferby-Speed Version 8 ist noch eine Alpha Version, ich hab es nur zum Testen der Grafikengine raufgestellt, das Spiel selbst ist noch nicht fertig und kann noch Bugs haben. Ich bitte nur um Kritik zur Grafik Leistung nicht zum Eigentlichen Spiel. Version 8 Alpha 1: Diese Version funktionirt mit Images, ohne Double Buffered Version 8 Alpha 1.1 Diese Version funktioniert mit Images, mit Double Buffered Version 8 Alpha 2 Diese Version funktioniert mit einen Bitmap und PaintBox EDIT: Entzipt die Datei, öffnet die Exe, geht auf LEVEL LADEN, wählt Level 10. Da sieht man am besten den Unterschied. Fazit: Die eigene Engine hat sich gelohnt, fast kein Geschwindigkeitsverlust und die Grafiken ruckeln nicht mehr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz