Entwickler-Ecke
Multimedia / Grafik - 2D-Engine mit Bitmaps
AlienX - Mi 14.08.02 22:42
Titel: 2D-Engine mit Bitmaps
Hi,
ich habe leider keine passenden Tutorials zu diesem Thema zur Hand. Also zur Erklärung:
(unwichtig)
Ich hab schon ein paar kleine Programme geschrieben, zB ein Tetris mit einigen Animationen, und hab auch den Informatik Kurs sehr gut durchgezogen, bin also kein absoluter Newbie. Jetzt hab ich mir ein kleines Adventure vorgenommen, aber ich will keine vorgefertigten 2D-Engines oder Komponeten (DirectX), weil es mir mehr darum geht, die Technik dahinter zu verstehen.
(/unwichtig)
Das ganze soll im Stil des ersten Monkey Island Teils sein, also relativ einfach.
Allerdings hab ich noch ein paar Fragen:
Wie kann ich den BildschirmModus ändern und direkt auf den Bildschirm zeichnen?
Also wie in M.I. 1 nicht im Fenster und ohne Flackern, nicht wie bei der Canvas.
Außerdem hab ich noch nicht viel Erfahrung mit der Arbeit mit Bitmaps:
Wie muss ich den Pfad bei TBitmap.LoadFromFile angeben?
Bei Start bekomme ich keine Fehlermeldung, erst beim eigentlichen Ausführen.
Die Animationen der Charakter will ich mit mehreren Bitmaps speichern, was ziemlich viel Speicher / -platz frisst. Gibt es eine bessere Möglichkeit?
OregonGhost - Do 15.08.02 13:43
AlienX hat folgendes geschrieben: |
Das ganze soll im Stil des ersten Monkey Island Teils sein
|
Monkey Island I Disketten- oder CD-Version? :wink:
Monkey Island I war ein DOS-Spiel. Da war es normal, direkt auf den Frontbuffer zu schreiben. Das macht man heute eigentlich nicht mehr, aber wenn du es trotzdem willst, kann ich dir hier nicht weiterhelfen.
Um das Flackern zu beseitigen, kannst du aber auch einfach in eine Bitmap zeichnen, und diese dann auf dein (natürlich Rahmenloses Vollbild-) Fenster zeichnen.
AlienX hat folgendes geschrieben: |
Wie muss ich den Pfad bei TBitmap.LoadFromFile angeben?
Bei Start bekomme ich keine Fehlermeldung, erst beim eigentlichen Ausführen.
|
Du hast bestimmt eine Variable vom Typ TBitmap, und dann machst du LoadFromFile.
Vorher musst du das Objekt aber erzeugen, und zwar so:
Quelltext
1:
| DeineBitmap := TBitmap.Create; |
Außerdem musst du es irgendwann, spätestens am Ende des Programms, mit
wieder freigeben.
Zu deinen Speicherprobleme kann ich nur zwei Tips geben.
MI I Disketten Version hatte 16 Farben, das heißt 4 Bit pro Pixel - ist schon ziemlich winzig. Die CD-Version hatte 256 Farben, also 8 Bit pro Pixel, auch das spart schon was ein. Wenn du die Bitmaps zusätzlich RLE-komprimierst, könnte das schon reichen.
Ansonsten solltest du vielleicht GIF, PNG oder JPEG als Format in Betracht ziehen.
AlienX - Do 15.08.02 17:42
Okay, Danke.
Ich hatte Bild.Create; .
Nochmal zum Fullscreen: Das Fenster auf die volle Größe zu setzen ist ja keinProblem, aber TaskLeiste etc ist dann immer noch da, oder? Da gibt es doch einen speziellen FullScreen Modus oder ist das etwa der DOS Screen?
AlienX - Do 15.08.02 19:07
Okay, das aus dem Swish Center ist gut, thx.
Das sollte für's erste reichen. Sonst meld ich mich wieder =p.
OregonGhost - Fr 16.08.02 09:33
Die Schweizer Lösung hat nur ein Problem: Wenn der Anwender während der Ausführung des Programms z.B. <Strg>-<Esc> oder <Alt>-<Tab> drückt, um auf den Desktop zu wechseln, ist da keine Taskleiste... Also müsste korrekterweise deine Anwendung solche Möglichkeiten abfangen und dann die Taskleiste wieder freigeben. Beispielsweise kannst du auch abfragen, ob dein Fenster das aktive ist (GetActiveWindow()).
Alternativ kannst du übrigens entweder in den exklusiven Modus von Direct3D bzw. DirectDraw wechseln, dann kannst du auf dein Formular genauso zeichnen wie ohne D3D, oder in den entsprechenden Modus von OpenGL, aber da weiß ich nicht, wie man auf die Form zeichnet.
knightkiller - Fr 16.08.02 11:26
OregonGhost hat folgendes geschrieben: |
Alternativ kannst du übrigens entweder in den exklusiven Modus von Direct3D bzw. DirectDraw wechseln, dann kannst du auf dein Formular genauso zeichnen wie ohne D3D |
wie würde denn das funktionieren? :?:
AlienX - Fr 16.08.02 12:44
Und für den seltenen Fall, dass der Rechner es nicht unterstützt, würde das auch dann funktionieren? (Wenn man keine D3D Funktionen benutzt).
P.S: Ich hab für meinen ersten Versuch einen extra Thread erstellt, damit's hier übersichtlich bleibt.
OregonGhost - Fr 16.08.02 16:09
Also, wenn du willst, dass es quasi auf jedem Rechner läuft, nimm einfach DirectX3. Das gibt es nämlich auch für Windows NT4. Frag mich jetzt net, wie genau das geht, aber im Prinzip musst du einfach nur DirectDraw initialisieren. Da du in Delphi programmierst, musst du die entsprechende Header besorgen (siehe in irgendeinem anderen Thread (c; ), z.B. von den JEDI.
Eine Suche in der MSDN zum Thema IDirect3D2 oder IDirectDraw3 sollte näheres erläutern. Wenn du als Voraussetzung einfach DirectX7 oder 8 nimmst, ist es allerdings einfacher, denn die API wurde ganz schön entschlackt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!