Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 2D-Bitmap scrollen ???!!! (https://www.delphipraxis.net/37238-2d-bitmap-scrollen.html)

Luna 3. Jan 2005 02:44


2D-Bitmap scrollen ???!!!
 
Hallo Leute,
ich hab ein Problem und drehe langsam am Rad :cry:

Ich möchte ein Spiel programmieren, so ähnlich wie die PanzerGeneral-Serie oder Strategic Command. Dazu möchte ich eine Bitmap, die deutlich größer als ein Bildschirmauflösung von 1280x1024 ist, einfach durch Bewegen des Mauszeigers an den Rand des Bildschirms in die entsprechende Richtung scrollen. Und ich möchte halt nicht die TScrollbox benutzen, da dies viel umständlicher ist... mit den ScrollBars. Kann mir jemand dazu einen Tipp geben ?

Vielleicht gibt es ja eine ganz einfache Lösung, ich kenne mich in Delphi noch nicht so aus, habe aber jetzt eine 5.0 Version geschenkt bekommen. Vielen Dank im voraus, und ach ja frohes Neues :xmas:

Luna

supermuckl 3. Jan 2005 02:47

Re: 2D-Bitmap scrollen ???!!!
 
hmm
Hast aber hohe Ansprüche ;)

Jedenfalls ist der Weg den du dir da vorgenommen hast sehr steinig.
Und der erste wäre:

Die meisten bzw alle Spiele, die so aufgebaut sind, scrollen nicht das Riesenbitmap, sondern bauen nur das auf, was im sichtbaren bereich liegt und den musst du halt dann verschieben ;)

//edit
Herzlich willkommen bei DP :)

Oxmyx 3. Jan 2005 03:37

Re: 2D-Bitmap scrollen ???!!!
 
So ein riesiges Bitmap, das sich als Spielfeld eignen würde, braucht zudem auch massig Speicherplatz und kann wahrscheinlich gar nicht flüssig bewegt werden.
Besser ist es, das Spielfeld aus kleinen Flächen aufzubauen (z.B. Quadrate oder, so wie in Panzer General: Sechsecke), dass du dann z.B. eine Fläche für "Wiese" hast, und eine andere für "Wald", "Gebirge", etc. Dann zeigst du nur diejenigen Flächen an, die im Bildschirmausschnitt überhaupt sichtbar sind.
Es gibt auf jeden Fall keine "ganz einfache Lösung", und wenn du wirklich ganz unerfahren im Programmieren bist, such dir doch für den Anfang etwas leichteres aus. :-)

MisterNiceGuy 3. Jan 2005 08:00

Re: 2D-Bitmap scrollen ???!!!
 
...Aber falls du dein Spiel wirklich so aufbauen willst, leg deine Imagekomponente auf ein panel und verschiebe das Image, indem du dessen X und Y Position auf dem Panel festlegst.
Beim OnMouseMove des Panels legst du bestimmte Zonen fest und wenn sich die Maus auf einer der Zonen befindet, lässt du das Image auf dem Panel wandern :)

Ben1 3. Jan 2005 19:50

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

So ein riesiges Bitmap, das sich als Spielfeld eignen würde, braucht zudem auch massig Speicherplatz und kann wahrscheinlich gar nicht flüssig bewegt werden.
Eine These die bereits vor vielen Jahren durch Panzergeneral 3D wiederlegt wurde. Das Spiel verwendete eine riesige Bitmap mit einem handgemalten Hintergrund als Spielfeld.
Ist es den so schwierig einen bestimmten Bereich einer Bitmap über DirectX auf das Surface zu klatschen ?

Oxmyx 3. Jan 2005 20:42

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

Zitat von Ben1
Eine These die bereits vor vielen Jahren durch Panzergeneral 3D wiederlegt wurde. Das Spiel verwendete eine riesige Bitmap mit einem handgemalten Hintergrund als Spielfeld.
Ist es den so schwierig einen bestimmten Bereich einer Bitmap über DirectX auf das Surface zu klatschen ?

Es ist ja etwas komplett anderes, ob ich eine große Textur von DirectX zeichnen lasse, oder in einem Steuerelement (z.B. TImage) der grafischen Windows-Oberfläche. Ersteres geht, zweiteres geht nicht so gut (weil es ruckelt).
Und man kann nicht DirectX einfach mal kurz dazu benutzen, das zu zeichnen. Um ein Bild mit DirectX zu zeichen, muss man erst die Verwaltungsschnittstelle IDirect3D9 erzeugen, dann muss man die Geräteschnittstelle IDirect3DDevice9 erzeugen, dann muss man ein RHW-Vertexformat und ein flexibles Vertexformat definieren, ein Rechteck aus zwei Dreiecken erzeugen, das Bild mit der Texturschnittstelle IDirect3DTexture9 laden, und dann durch Aufrufe von IDirect3DDevice9.BeginScene/SetRenderState/SetTexture/ SetMaterial/SetTransform/DrawPrimitiveUP/EndScene/Present das Bild schließlich rendern. Für absolute Anfänger ist das auch wegen den verwendeten Technologien (COM) sehr undurchsichtig.

Luna 4. Jan 2005 05:02

Re: 2D-Bitmap scrollen ???!!!
 
Vielen Dank Leute für die Antworten, wenn auch keine richtig hilfreich war :|
Aber ich denke ich habe das Problem jetzt im Griff mit image und paintbox :-D

bis denne, Luna

Ben1 4. Jan 2005 06:32

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

dann muss man ein RHW-Vertexformat und ein flexibles Vertexformat definieren, ein Rechteck aus zwei Dreiecken erzeugen, das Bild mit der Texturschnittstelle IDirect3DTexture9 laden, und dann durch Aufrufe von IDirect3DDevice9.BeginScene/SetRenderState/SetTexture/ SetMaterial/SetTransform/DrawPrimitiveUP/EndScene/Present das Bild schließlich rendern.
Nö, muß man nicht. Man kann genauso gut die Schnittstellen für DirectDraw (also den alten 2D Teil) benutzen, indem man statt DX 9 z.B. DX 7 nutzt. Aufgrund der strickten Abwärtskompatibilität von DX ist das möglich.

Oxmyx 4. Jan 2005 12:01

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

Zitat von Ben1
Nö, muß man nicht. Man kann genauso gut die Schnittstellen für DirectDraw (also den alten 2D Teil) benutzen, indem man statt DX 9 z.B. DX 7 nutzt. Aufgrund der strickten Abwärtskompatibilität von DX ist das möglich.

Dabei verzichtet man auf alles gute, was DirectX ausmacht (Hardwarebeschleunigung).

Ben1 4. Jan 2005 12:11

Re: 2D-Bitmap scrollen ???!!!
 
?
Wenn auf den Rechner DX 9 installiert ist, man aber z.B. DX 7 Funktionen benutzt, dann werden die trotzdem von DX 9 ausgeführt !
Außerdem, wat willste den bitteschön beim simplen zeichen einer Bitmap in 2D groß beschleunigen ?
Die Hardwarefunktionen der Grafikkarte sind doch auf 3D ausgelegt, die nützen da sowieso nichts.

Oxmyx 4. Jan 2005 12:34

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

Zitat von Ben1
?
Wenn auf den Rechner DX 9 installiert ist, man aber z.B. DX 7 Funktionen benutzt, dann werden die trotzdem von DX 9 ausgeführt !
Außerdem, wat willste den bitteschön beim simplen zeichen einer Bitmap in 2D groß beschleunigen ?
Die Hardwarefunktionen der Grafikkarte sind doch auf 3D ausgelegt, die nützen da sowieso nichts.

Genau deshalb wurde DirectDraw doch abgeschafft, weil es eben nicht die Hardwarefunktionen der Grafikkarte nutzt. Und wenn ich eine DirectDraw-Anwendung erstelle, dann werden mit Sicherheit nicht die Funktionen von DirectX9 benutzt, weil es DirectDraw seit Version 8 einfach nicht mehr gibt.
Selbstverständlich kann man das Zeichnen eines Bildes extrem beschleunigen, wenn man wie von mir oben beschrieben entweder RHW-Vertizes oder normale Vertizes und Identitätsmatrizen für Sicht und Perspektive verwendet, denn dann kommen die Zeichenfähigkeiten der 3D-Grafikkarte voll zum tragen. Man wäre schön blöd, wenn man darauf verzichten würde mit einer völlig veralteten Technologie wie DirectDraw.

Ben1 4. Jan 2005 13:07

Re: 2D-Bitmap scrollen ???!!!
 
Das müßtest du mir nun aber mal begründen !?

Warum sollte eine Bitmap wenn sie ohne Umweg über DX 7 Schnittstellen auf das Surface gezeichnet wird, langsamer dargestellt werden als wenn ich sie vorher expliziet mit DX 9 durch die komplette Renderpipline jage ?

Ich würde eher sagen das es gleichschnell ist, da DX 9 Befehle über DX 7 Schnittstellen mit seinen eigenen Mitteln umsetzt. Aber das könnte wohl nur das Experiment belegen bzw. wiederlegen.

Oxmyx 4. Jan 2005 13:23

Re: 2D-Bitmap scrollen ???!!!
 
Du hast dir die Antwort schon selber gegeben: Weil ich das Rechteck mit dem Bild durch die Rendering-Pipeline jage. Dann übernimmt der Rasterizer der 3D-Hardware das Zeichnen der Texel, und der ist viel schneller als wie wenn man direkt die Pixel auf das Surface setzt.

Eins ist aber völliger Unsinn: DirectX9 benutzt keine einzige Direct7-Schnittstelle! DirectX9 hat eine völlig andere Architektur als DirectX7, mit der Version 8 wurde ein radikaler Bruch vollzogen, als dieser ganze Krempel mit DirectDraw und Retained/Immediate-Mode abgeschafft wurde.

Ben1 4. Jan 2005 14:09

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

DirectX9 benutzt keine einzige Direct7-Schnittstelle!
Das habe ich ja auch nie behauptet, ich sagte nur das sie darin enthalten sind! Ich weiß auch das DX 9 umgestaltet wurde, aber trotzdem noch jeden Befehl von Programmen die die mit DX <9 geschrieben wurden ausführen kann. Wäre ja schlim wenn das nicht so wäre !
Und deswegen bin ich der Meinung das ein Zeichnen über die alten Schnittstellen von DX 3 bis 7, die ja bekanntlich aus Kompatibilitätsgründen immer noch in den Headern enthalten sind (einfach reingucken wenn du das nicht glaubst), ein genauso schnelles Darstellen einer Bitmap ermöglicht als wenn ich das direkt über die DX 9 Schnittstellen machen würde.

Nonsense 4. Jan 2005 14:29

Re: 2D-Bitmap scrollen ???!!!
 
Das Zauberwort heißt OpenGL... :wink: :mrgreen:

Oxmyx 4. Jan 2005 23:37

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

Zitat von Ben1
Zitat:

DirectX9 benutzt keine einzige Direct7-Schnittstelle!
Das habe ich ja auch nie behauptet, ich sagte nur das sie darin enthalten sind! Ich weiß auch das DX 9 umgestaltet wurde, aber trotzdem noch jeden Befehl von Programmen die die mit DX <9 geschrieben wurden ausführen kann. Wäre ja schlim wenn das nicht so wäre !
Und deswegen bin ich der Meinung das ein Zeichnen über die alten Schnittstellen von DX 3 bis 7, die ja bekanntlich aus Kompatibilitätsgründen immer noch in den Headern enthalten sind (einfach reingucken wenn du das nicht glaubst), ein genauso schnelles Darstellen einer Bitmap ermöglicht als wenn ich das direkt über die DX 9 Schnittstellen machen würde.

Nein. DirectDraw ist nicht 3D-beschleunigt, bietet weniger Features und ist langsamer als Direct3D. Das wird dir jeder der sich mit Direct3D auskennt, bestätigen können. Glaub es, oder nicht. DirectX9 kann keine Programme ausführen, die mit DirectX7 geschrieben wurden. Richtig ist, dass durch die COM-Abwärtskompatibilität von DirectX noch die alten Schnittstellen enthalten sind, DX9 kann damit jedoch nichts mehr anfangen. Hab keine Zeit ein Testprogramm zu schreiben das den Geschwindigkeitsvorteil von Direct3D beweisen würde, aber es ist nunmal Fakt, dass DirectDraw nicht von den Fähigkeiten der Grafikkarte voll Gebrauch macht.

supermuckl 5. Jan 2005 01:02

Re: 2D-Bitmap scrollen ???!!!
 
Es wird ja auch bei DirectDraw die 2D Hardware Beschleunigung verwendet und nicht wie bei Direct3D der 3D Teil der GPU

chkdsk 6. Jan 2005 19:04

Re: 2D-Bitmap scrollen ???!!!
 
Zitat:

DirectX9 kann keine Programme ausführen, die mit DirectX7 geschrieben wurden. Richtig ist, dass durch die COM-Abwärtskompatibilität von DirectX noch die alten Schnittstellen enthalten sind, DX9 kann damit jedoch nichts mehr anfangen.
Aber alte DirectX Titel mit DirectDraw laufen doch nach wie vor unter DirectX 9!

Ich wollte sowieso nacher noch Commandos ausgraben und spielen, aber ich bin mir sicher, dass es geht!


Übrigens: Wozu überhaupt DirectX, oder OpenGL (was noch weniger von den Treibern her unterstützt wird) einsetzen?

Für einfache 2D Grafik sachen kann man wunderbar z.B. Graphics32 in Delphi einsetzen.

supermuckl 6. Jan 2005 19:07

Re: 2D-Bitmap scrollen ???!!!
 
das was er machen will, sind aber keine einfachen 2D sachen, die keine hardwarebeschleunigung erfordern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 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