![]() |
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 |
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 :) |
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. :-) |
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 :) |
Re: 2D-Bitmap scrollen ???!!!
Zitat:
Ist es den so schwierig einen bestimmten Bereich einer Bitmap über DirectX auf das Surface zu klatschen ? |
Re: 2D-Bitmap scrollen ???!!!
Zitat:
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. |
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 |
Re: 2D-Bitmap scrollen ???!!!
Zitat:
|
Re: 2D-Bitmap scrollen ???!!!
Zitat:
|
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. |
Re: 2D-Bitmap scrollen ???!!!
Zitat:
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. |
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. |
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. |
Re: 2D-Bitmap scrollen ???!!!
Zitat:
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. |
Re: 2D-Bitmap scrollen ???!!!
Das Zauberwort heißt OpenGL... :wink: :mrgreen:
|
Re: 2D-Bitmap scrollen ???!!!
Zitat:
|
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
|
Re: 2D-Bitmap scrollen ???!!!
Zitat:
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. |
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