Autor Beitrag
AlienX
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.08.02 22:42 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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:
ausblenden Quelltext
1:
DeineBitmap := TBitmap.Create;					

Außerdem musst du es irgendwann, spätestens am Ende des Programms, mit
ausblenden Quelltext
1:
DeineBitmap.Free;					

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.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
AlienX Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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?
ao
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 145

Win XP Prof.
D7 Ent.
BeitragVerfasst: Do 15.08.02 17:54 
Hallo AlienX,

zum Thema Vollbild kannst du dir mal diesen Thread anschauen. Ich hoffe das hilft dir weiter.

Gruß
Andreas
AlienX Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
knightkiller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

WinXP SP2
D7 Pers, D2005 Pers
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.