Autor Beitrag
.50AE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: So 07.01.07 20:27 
Hallo,

ich sitze immernoch an meinem 2D Jump'n'Run Spiel, das ich bis spätestens nächstes Jahr fertig kriegen sollte ;-)

Mein Problem (sicher nicht das letzte), besteht darin, die Welt, in der sich der Spieler bewegt, graphisch umzusetzen.
Das naheliegendste Medium dafür ist wohl eine PaintBox.

Das, was der Spieler später auf seinem Bildschirm sieht, sollen, so habe ich mir das bis jetzt vorgestellt, mehrere PaintBox-Ebenen sein.
Die 1.: der Hintergrund,
Die 2.: Die Teile (Durchlässig und unduchlässig),
x weitere: Alle animierten/sich bewegenden Objekte. (wahrscheinlich jeweils auf einer extra paintbox)

Die Bedingung für die Umsetzbarkeit dieser Form der Darstellung ist, dass die Paintboxen allesamt (außer die Hinterste) transparente BitMaps (OffsetBmp's) beinhalten und diese Bitmaps schnell auf die Paintboxen übertragen werden können ohne dass die Transparenz dabei verloren geht. Weiter muss es schnell gehen Paintboxen zu erstellen/positionieren und zu löschen (für die animierten Objekte).

Das Problem: Transparente Bitmaps per Draw auf die Paintboix(en) zu zeichnen ist relativ zeitaufwendig. Wenn ich das mit der wesentlich schnelleren BitBlt Prozedur mache, geht es zwar schnell; jedoch geht die Transparenz aus mir nicht erschließbaren Gründen leider verloren... Was das Konzept natürlich zerstört.

Meine Frage an Euch:
- Wie löse ich das Problem der Transparenzfrage.
- Wenn Frage 1 geklärt ist und es immernoch zu langsam ist, wäre es sinnvoll eine Paintbox in "Spielfeldausschnittgröße" zu erstellen und jeweils nur den Bereich hineinzuzeichnen, der auch vom Spieler gesehen wird? (anstatt die Felder alle in eine Paintbox der größe ..4800x2400px zu zeichnen (wenn das lvl geladen wird) und diese dauernd zu verschieben)
- Oder gibt es eventuell eine einfachere Möglichkeit das Spiel graphisch umzusetzen?

Ich habe jetzt schon viel mit Paintboxen rumprobiert, um das mit der Transparenz und der Geschwindigkeit hinzubekommen, bin aber zu keinem brauchbaren Ergebnis geraten.
Ich habe auch schon den Entwickler eines anderen 2D Spiels darauf angeschrieben, allerdings habe ich bis jetzt keinerlei Antwort erhalten (ist schon eine Weile her...).
Da ich also keinerlei Ahnung habe wie ich weiterkomme, muss ich Euch mal damit belästigen ;-)

Ich bin für alle Ratschläge und Antworten dankbar!




MfG
50ae
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 07.01.07 20:50 
Ich würd OpenGl nehmen, da kannste eigentlich so viel malen wie du willst und es wird trotzdem (fast) nicht langsamer.
Für den Einstieg ist das ne ganz gute Unit: Suche in: Delphi-Forum, Delphi-Library FEAR2D
Der einzige Nachteil ist, dass du bei den Texturgrößen auf Potenzen von 2 Beschränkt bist, wenn die Performance nicht in den Keller gehen soll und ältere Systeme unterstützt werden sollen. Dafür hast du halt hardwarebeschleunigtes rendern.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: So 07.01.07 21:14 
Danke, das liest sich ja schonmal sehr gut!

Ich dachte bisher, man könne OpenGL nur für 3D Grafik verwenden..
(Ich bin noch nicht so gebildet, was Delphi und vorallem Grafik/Sound angeht..)

Ist es richtig, dass ich das komplette Formular zur Grafikdarstellung benutze, wenn ich auf OpenGl zurückgreife?
Kann ich den Bereich auch irgendwie eingrenzen, sodass ich ein Normales Delphi-Menü mit Optionen usw parallel dazu habe?
Oder muss ich das in eine extra Exe packen, in der man dann die Einstellungen usw variieren kann?

MfG
50ae

//Edit
Wow! Allein der Effekt in der Demo von Fear2D ist ja richtig cool! Ich freu mich schon drauf damit zu arbeiten! Danke nochmal!


Zuletzt bearbeitet von .50AE am So 07.01.07 21:32, insgesamt 1-mal bearbeitet
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 07.01.07 21:18 
Man kann das ganze auch in ein Panel oder ein X-beliebiges anderes Control packen (sogar auf nen Button^^). Wichtig ist nur, dass das Steuerelement ein Windows-Fenster ist, also zB. kein Label (sondern dann TSTaticText).
Wenn du noch ein bisschen wartest, gibts dann auch ne GUI für OpenGl (mit Fear2D) von mir. Die kann dan Button, Edit, Panel, Image, ScrollBar, ScrollBox und wahrscheinlich auch Checkbox und Radiobutton.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: So 07.01.07 22:07 
Okay, und wie funktioniert das? ;)
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 07.01.07 22:21 
Wenn du willst, schau dir mal mein Spiel an, wenn du glaubst, der Quellcode könnte dir helfen, lass ich ihn dir gern auch zukommen ;)
Ist mit der F2D Engine geschrieben und ziemlich simpel, sobald man mal durchblickt ^^'

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Di 09.01.07 16:05 
Hi,

bei deinem Spiel ist die Engine ja auch nicht in einem Panel o.ä. geladen, also könnte ich speziell das nicht aus dem Quellcode lernen oder?
Kannst du mit vielleicht einfach so sagen, wie das geht? Eine kleine Anleitung zur Handhabung steht ja in dem Beitrag, dessen Link du oben gepostet hast; den Rest will ich erstmal so probieren ;-)

MfG
50ae
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 09.01.07 16:28 
Nein, natürlich, bei meinem Spiel ist kein Panel o.ä. für die OpenGL Ausgabe verantwortlich. Ich meinte, dass das Spiel gut geeignet ist, um die generelle Funktionsweise der Engine zu verstehen... Wie man OpenGL auf ein Panel packt weiß ich leider auch nicht, nicht, dass ich es je gebraucht hätte ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Di 09.01.07 16:44 
Okay, schade ;-)

Dann werd ich mal sehen wie ich die Lebens- und Munitionsanzeige usw ingame darstelle.

Vielen Dank nochmal für die Hilfe!
50ae

//Edit: Ich kann Panels "oberhalb" von der Engine erstellen, somit ist es kein Problem, ein einfaches Ingame-Spielmenü und eine Leiste für andere Informationen zu kreieren ;-)


Zuletzt bearbeitet von .50AE am So 14.01.07 01:30, insgesamt 1-mal bearbeitet
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 09.01.07 16:58 
user profile icon.50AE hat folgendes geschrieben:
Hallo,

ich sitze immernoch an meinem 2D Jump'n'Run Spiel, das ich bis spätestens nächstes Jahr fertig kriegen sollte ;-)

Mein Problem (sicher nicht das letzte), besteht darin, die Welt, in der sich der Spieler bewegt, graphisch umzusetzen.
Das naheliegendste Medium dafür ist wohl eine PaintBox.

Das, was der Spieler später auf seinem Bildschirm sieht, sollen, so habe ich mir das bis jetzt vorgestellt, mehrere PaintBox-Ebenen sein.
Die 1.: der Hintergrund,
Die 2.: Die Teile (Durchlässig und unduchlässig),
x weitere: Alle animierten/sich bewegenden Objekte. (wahrscheinlich jeweils auf einer extra paintbox)

Die Bedingung für die Umsetzbarkeit dieser Form der Darstellung ist, dass die Paintboxen allesamt (außer die Hinterste) transparente BitMaps (OffsetBmp's) beinhalten und diese Bitmaps schnell auf die Paintboxen übertragen werden können ohne dass die Transparenz dabei verloren geht. Weiter muss es schnell gehen Paintboxen zu erstellen/positionieren und zu löschen (für die animierten Objekte).

Mehr als bis zur markierten Stelle habe ich nicht gelesen, denn da machst du den entscheidenden Fehler, denn man nimmt eine Paintbox um an Performance gegenüber eines Images zu gewinnen, wenn du jetzt aber drei davon nimmst, hast du diesen Vorteil wieder verspielt, denn mit Paintboxen kannst du wirklich kinderleicht drei Ebenen auf EINE Paintbox zeichnen. Ansonten: DirectX bzw OpenGL

Zitat:

Ich dachte bisher, man könne OpenGL nur für 3D Grafik verwenden..

das stimmt soweit auch, aber 2D ist ja im Grund auch 3D, nur dass man eine kleinere Basis hat. die dritte Dimension lässt sich aber wunderbar zur Objektsortierung verwenden, also der Hintergrund nach hinten etc. Und jedem der Fear2D benutzt empfehle ich, sobald er damit einigermaßen klar kommt, sich wirklich mit richtigem OpenGL zu beschäftigen, denn damit kann man wirklich eine Menge anstellen !

mfg