Autor Beitrag
shalashaska
Hält's aus hier
Beiträge: 7

Windows XP
Delphi 6
BeitragVerfasst: So 14.11.04 21:06 
SO! ENDLICH! Nachdem ich es endlich geschafft habe mich hier in diesem SCHHH... Forum einzuloggen kann ich endlich mal ne Frage stellen... :evil:

puhhh..

Also. Ich brauche einfach etwas schnelleres als die guten alten Prozeduren wie Canvas.Draw, Canvas.CopyRect etc...! DIe sind zwar so ganz schön und gut aber ich brauche etwas schnelleres und ich denke wir sind uns sicher das es etwas schnelleres gibt!

Z.b. hat mir mal jemand von WinG erzählt. Schön. Da gibts die Unit welche sich "dibs" nennt und versch. Prozeduren für Dibs und FLIs enthält. Nun hab ich mir mal so eine dieser Prozeduren und was dazu gehörte in meinen Code kopiert aber denkt ihr das funktionierte? HAH!

Also was kann ich tun? Sollte ich vielleicht wirklich auf C++ umsteigen? Delphi scheint in Richtig Grafik/Spiele einfach NICHTS zu taugen. Vielleicht muss ich wirklich lernen systemnah zu programmieren da Prozeduren wie Canvas.Draw usw. vermutlich über die abenteuerlichsten Umwege funktionieren und somit in Sachen Performance nichts bieten können. :x :(

cya!

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.
Moderiert von user profile iconTino: E-Mailadresse entfernt. Antworten hier ins Forum - s. Richtlinien
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: So 14.11.04 21:20 
shalashaska hat folgendes geschrieben:
SO! ENDLICH! Nachdem ich es endlich geschafft habe mich hier in diesem SCHHH... Forum einzuloggen kann ich endlich mal ne Frage stellen... :evil:

So macht man sich gleich ein paar Freunde in diesem SCHHH...önen Forum :roll:

WinG ist IIRC nichts anderes als der Vorgänger von Suche in: Delphi-Forum, Delphi-Library DIRECTX. Alternativ gäbs für Grafiken in Delphi auch noch Suche in: Delphi-Forum, Delphi-Library OPENGL und Suche in: Delphi-Forum, Delphi-Library SDL.

_________________
JSXGraph
Spieler1
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 469


D6 Pers
BeitragVerfasst: So 14.11.04 21:22 
Das hat nichts mit Delphi zu tun ... und nein, du solltest nicht auf C++ umsteigen. ;)

Probier mal (JEDI-)SDL aus.
Oder gleich OpenGL oder DirectX.
Spieler1
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 469


D6 Pers
BeitragVerfasst: So 14.11.04 21:23 
raziel hat folgendes geschrieben:
shalashaska hat folgendes geschrieben:
SO! ENDLICH! Nachdem ich es endlich geschafft habe mich hier in diesem SCHHH... Forum einzuloggen kann ich endlich mal ne Frage stellen... :evil:

So macht man sich gleich ein paar Freunde in diesem SCHHH...önen Forum :roll:

WinG ist IIRC nichts anderes als der Vorgänger von Suche in: Delphi-Forum, Delphi-Library DIRECTX. Alternativ gäbs für Grafiken in Delphi auch noch Suche in: Delphi-Forum, Delphi-Library OPENGL und Suche in: Delphi-Forum, Delphi-Library SDL.

Ahhhrg, du warst schneller! :wink:
shalashaska Threadstarter
Hält's aus hier
Beiträge: 7

Windows XP
Delphi 6
BeitragVerfasst: So 14.11.04 21:34 
Ja schön das weis ich auch... >_<
Aber wie benutzt man denn DX oder OpenGL in Delphi6??
Woher weis ich welche prozeduren es gibt und was sie machen?
Spieler1
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 469


D6 Pers
BeitragVerfasst: So 14.11.04 21:35 
shalashaska hat folgendes geschrieben:
Ja schön das weis ich auch... >_<
Aber wie benutzt man denn DX oder OpenGL in Delphi6??
Woher weis ich welche prozeduren es gibt und was sie machen?

Lies dir ein Tutorial darüber durch, schau in die Dokumentation oder such mal (z.B. mit Google ;)) danach ... :roll:
Spieler1
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 469


D6 Pers
BeitragVerfasst: So 14.11.04 21:38 
Schau z.B. mal auf dieser Seite (offizielle JEDI-SDL Homepage): www.delphi-jedi.org/TEAM_SDL_HOME:255650
shalashaska Threadstarter
Hält's aus hier
Beiträge: 7

Windows XP
Delphi 6
BeitragVerfasst: So 14.11.04 21:52 
Ich rege mich doch nur so auf weil es nichts zu geben scheint was wirklich hilft. Diese ganze DElphiX *mist*e kann man doch vergessen weil sie nur für Delphi 3 ist! ABER ICH HAB DELPHI 6! Und ich will doch einfach nur einpaar Bilder schnell auf ein fenster malen! Kann denn das so schwer sein? Muss ich jetzt wirklich Assembler lernen? :evil: :evil: :evil:
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 14.11.04 22:00 
es würde schon helfen, wenn du uns sagen würdest, was GENAU du machen willst :evil:
DelphiX ist nicht nur für D3 btw...
aber ob sich z.B. OpenGL lohnt hängt von dem ab, was du machen willst...
shalashaska Threadstarter
Hält's aus hier
Beiträge: 7

Windows XP
Delphi 6
BeitragVerfasst: So 14.11.04 22:26 
Ich will eventuell ein kleines 2D Spiel programmieren.

Und hier ist z.B. schon ein Problem wo man schnelle Grafik braucht: Stell dir mal vor ich habe ein ein kleines Männchen das sich über das Fenster bewegen soll. Da das kein 3D spiel sein wird wird das Männchen also nicht aus Matrizen sondern simpel aus einem Bitmap bestehen das mit jedem Intervall des Timers etwas weiter gezeichnet wird was ja dann wie eine Bewegung aussieht. Damit das Männchen aber nicht eine Spur aus dutzenden duplikaten hinter sich lässt muss das Fenster bzw. der Hintergrung auf dem sich das Männchen-Bitmap bewegt permanent neu gezeichnet werden! Dazu braucht man auf dauer sicher etwas schnelleres als Canvas.Draw.

Der Hintergrung wird bei mir aus 40x40px großen Kacheln bestehen.

Wenn das Spiele Fenster jetzt 800x600 groß ist dann müssen also 20x15 Bitmaps der größe 40x40 jedes mal neu auf das Fenster gezeichnet werden wenn man die Map bewegt, oder sich eine Einheit bewegt oder was auch immer. Da nützt es auch sicher nichts nur einen Teil des Screens neu zu zeichnen weil da sicher soviele bewegungen zusammenkommen die es sinvoller machen gleich alles neu zu zeichnen. Wenn du mal mein Experimentalprogramm willst kannst du es gerne haben! Nur es sollte schon schneller gehen denke ich…

Animationen soll es ja auch geben! Nehmen wir z.B. mal ein Bitmap der größe 200x40px. Das wären dann also 5 bilder die dann aus diesem Bitmap mit jedem Intervall des timers auf das Fenster kopiert werden wodurch eine Animation entsteht.

Wie du siehst… Es gibt viele dinge so zusammenkommen. Und das ist ja nochnicht alles! Stell dir mal vor mein Programm muss noch irgendwelche berechnungen machen zwischendurch machen! Stell dir vor das Programm muss zu jedem Intervall prüfen ob sich eine Feindeinheit in der Nähe befindet welche beschossen werden muss. Das kommt alles zusammen. Es wird natürlich nur der Teil der Map gezeichnet der gerade angezeigt wird aber trodzdem.

Vielleicht könnt ihr jetzt besser nachvollziehen worum es geht und warum ich Unbedingt schnelle Grafik brauche…
:)

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: So 14.11.04 22:48 
auf [url]www.DelphiGL.com[/url] gibt's auch'n Tutorial über 2D mit OpenGL

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
Spieler1
ontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 469


D6 Pers
BeitragVerfasst: Mo 15.11.04 00:12 
shalashaska hat folgendes geschrieben:
Ich rege mich doch nur so auf weil es nichts zu geben scheint was wirklich hilft. Diese ganze DElphiX *mist*e kann man doch vergessen weil sie nur für Delphi 3 ist! ABER ICH HAB DELPHI 6! Und ich will doch einfach nur einpaar Bilder schnell auf ein fenster malen! Kann denn das so schwer sein? Muss ich jetzt wirklich Assembler lernen? :evil: :evil: :evil:
Hast du die Tipps mit SDL, DirectX und OpenGL schon wieder vergessen? :roll:
Schau dir doch mal ein paar Tutorials zu dem Thema an ...
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mo 15.11.04 10:37 
Ich weiß nicht ob man einen unterstüzen sollte der so in einem Forum anfängt:

shalashaska hat folgendes geschrieben:
SO! ENDLICH! Nachdem ich es endlich geschafft habe mich hier in diesem SCHHH... Forum einzuloggen kann ich endlich mal ne Frage stellen... :evil:


An deiner Stelle würde ich mal eine dicke Entschuldigung von mir lassen.

So wie ich sehe willst du ein Spiel programmieren und kennst nicht mal die Sprache mit der du arbeitest. Aber es geht. Man kann auch ohne DirectX gute Ergebnisse erhalten. Aber zuerst zu der Frage ob andere Sprachen oder Systemnahe Programmierung da Abholfe bring. Nein. Warum? Delphis Canvas ist nur die Kapselung der Windows API. Es geht nicht alles 1:1 rüber, aber fast. Delphis Canvas macht die Verwaltung etwas einfacher, ohne jetzt selbst die Regie zu übernehmen. Wenn du es direkt mit der API machst, dann muß du vorher so um die fünf Anweisungen in der API ausführen. Dann muß du dir alles merken was du gemacht hast, weil du es später wieder schließen mußt. Delphis Canvas macht nichts anderes als diese Arbeit für dich zu erledigen. Der zeichnerische Part geht dann fast 1:1 rüber. Vielleicht klizekleine Verluste die bei der Übersetztung entstehen. Mehr aber auch nicht. Also, ob du mit Delphi oder API programmierst ist fast Wurscht. Nun zu C++. Glaubst du, daß C++ da irgendwelche Sonderkonditionen mit Bill Gates hat? Auch die kochen mit Wasser, bzw. gehen über die API.

Die Moral von der Geschichte ist, daß keine Sprache hier schneller ist, weil alle die Windows API nutzen. Und wie sieht es mit den Berechnungen? Also da kann ich mir nicht vorstellen, daß du komplizierte Berechnungen hast. Aber auch wenn, so spielt das keine große Rolle. Ich hab mal meine privaten Berechnungen durchgeführt und festgestellt, daß es da kaum nennenswerte Unterschiede gibt. Also, ob Delphi oder C++ ist hier erst ein mal egal.

Das Problem ist Canvas. Aber hier die Frage: wieso können einige Programme wie z.B. Makromedia Flash schnelle Grafiken erzeugen ohne DirectX. Antwort: weil die Leute von Micromedia programmieren können. Wenn man sich die Beispiele und Tipps anguckt wie man mit Canvas arbeiten kann, dann weiß man wieso da nichts vernünftiges rauskommt. Da gibt es zuerst die Neigung eine Image Komponente zu nehmen. Das kriegt man schnell ausgetrieben. Als nächstes macht mal es mit Canvas und DubleBuffer. Das bringt schon etwas Linderung, ist aber immer noch zu ruckartig. Warum? Weil hier mit Kanonen auf Spazen geschossen wird. Nur um eine kleine Änderung zu machen wird der ganze Hintergrund neu gezeichnet, und dann wird das Männchen bewegt. Bisher ist es das höhste der Gefühle, daß ich je als Tipp gelesen habe. Mehr kriegt man nicht empfohlen. Kein Wunder, daß da keiner was vernünftiges hinkriegt. Dabei ist alles so einfach. Allerdings muß man hier tatsächlich die API bemühen. Grund ist der, daß die Canvas einige Funktionen nicht bietet. Wahrscheinlich weil es keiner braucht, bist auf fünf Leute die ein Spiel programmieren. Also muß man sich seine eigene Canvas programmieren oder erweitern. Gemeint sind Regionen und Clipping Bereiche. Man braucht doch nicht die ganze Zeichnung verändern, nur weil ich ein Männchen paar Pixel bewegt hat. Allso muß man eine Maske für das Bild berechnen in dem nur für die kleine Änderung ein Loch zu sehen ist. Hier werden die Kleinigkeiten verändert. Bleiben wir großzügig und optimieren nicht weiter. Mache ist ein Draw über so eine Maske, dann wird alles ignoriert was nicht im Clipping Bereich ist. Schon alleine mit dieser Kleinigkeit kann man sein Spiel enorm beschleunigen. Das reicht zwar nicht für einen 3D Sooter, aber für ein 2D Spiel allemal. Allerdings muß man hier ein wenig programmieren können. So ein Engine muß auch erst ein mal programmiert werden.

Wenn du aber einfache Spiele programmieren willst, dann würde ich die Macromedia Flash empfehlen. Einfach, simpel und für einfache Spiele ausreichend. Hier ist die Engine schon fertig. Alternative 2 ist DirectX.

_________________
Gruß
Martin
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 15.11.04 17:13 
MartinPb hat folgendes geschrieben:
Der zeichnerische Part geht dann fast 1:1 rüber.
Dem kann ich zwar zustimmen, aber es ist manchmal schon verwunderlich, wie viel schneller die direkte Benutzung der APIs ist.
Einschauliches Beispiel: BitBlt anstatt Draw bei großen Bildern!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
shalashaska Threadstarter
Hält's aus hier
Beiträge: 7

Windows XP
Delphi 6
BeitragVerfasst: Mo 15.11.04 21:17 
Hey MartinPb ich glaub das hier könnte ganz nütlich sein in sachen Maske oder?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function SelectClipPath;
begin
  GetProcedureAddress(_SelectClipPath, gdi32, 'SelectClipPath');
  asm
    mov esp, ebp
    pop ebp
    jmp [_SelectClipPath]
  end;
end;


Hab ich in einer der JEDI units gefunden die ich mir auf den rat einiger guter
Forum Mitglieder gedownloaded habe. :)

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.
recall
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 449



BeitragVerfasst: Mo 15.11.04 22:53 
hallo, bei all dem "off topic" frage ich mich, ob ich noch was zum Thema sagen sollte ;)

Nein, Spaß beseite... :| :| :|

Ich habe auch schon ein 2D-Spiel geschrieben und zwar vollständig mit Canvas.Draw, denn es reicht in der Tat aus. Auf einem 166Mhz schaffst du damit locker 20 Frames/s bei 40x40-Pixel-Quadraten, jedes wird neu gezeichnet und noch 50 Einheiten dazu... Wie das geht ? Ganz einfach, du musst dir ein Bitmap erstellen, welches nicht sichtbar ist, dort alles draufzeichnen (es sozusagen "puffern") und danach auf eine PAINTBOX (!WICHTIG!) zeichnen. Diese muss Align=alClient sein, dein Form setzt du ebenfalls Align=alClient und BorderStyle=bsNone. Außerdem dürfen außer leeren images, die du zum Erkennen von MouseOver-Events benutzen kannst, keine Komponenten auf der Form liegen (keine Sichtbaren).

Nimm keinen Timer, sondern eine "Endlos"-Schleife, in die du jeweils Application.ProcessMessages; schreibst. Eventuell kann das Programm abstürzen, wenn zu schnell gezeichnet wird, daher schreibe in die Schleife sleep(1).

FERTIG ! Für 2D braucht man sonst nix!

Viele Grüsse.

P.S.: Willst du Einheiten zeichnen, dann lade sie in Images mit Transparent=True und zeichne sie einfach mit Canvas.Draw auf den Untergrund... Die Transparenz wird dabei übernommen.

//EDIT: Habe nichts von der Auflösung geschrieben: Also das geht mit 20 Frames/s auf einem 166Mhz P1 mit 2MB-Grafik bei einer Auflösung von 1024x768 !

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 16.11.04 16:57 
Hallo!

Ich habe alle "Off Topic"-Postings aus diesem Thread entfernt. Wenn jemand noch Frust ablassen muss, tue er das bitte hier, das scheint zu dem "Off Topic"-Topic zu passen.

So, und nun brav beim Thema bleiben! ;-)

MfG
Christian

//edit: @basti: Poste das aus deinem Mega-Post, was on-topic war, bitte neu. Ich hatte keine Lust, mir das zusammen zu suchen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
shalashaska Threadstarter
Hält's aus hier
Beiträge: 7

Windows XP
Delphi 6
BeitragVerfasst: Di 16.11.04 17:48 
Oh ja jetzt werde ich ganz ganz brav sein... Aber meine Gedanken kannst
du nicht löschen. Du bist doch nichts weiter als ein kleiner braver Duckmäuser. Und Admin bist du auch dass findest du bestimmt ganz toll..
hilfe!
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Di 16.11.04 18:18 
Zitat:
Aber meine Gedanken kannst du nicht löschen
will er bestimmt auch nicht, behalt sie doch in Zukunft einfach für dich, ja?

Zitat:
hilfe!
ich glaube nach deinem Auftritt hier kannst du von niemandem mehr Hilfe erwarten, oder?

für mich liest sich das so wie: "Ich will programmieren. Jetzt sofort! Was, ich muss da was machen? Alles *mist*, bestimmt bist du auch Cheater (Du weißt schon: "Cheater haben kleine ..."

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 16.11.04 18:19 
shalashaska hat folgendes geschrieben:
Oh ja jetzt werde ich ganz ganz brav sein... Aber meine Gedanken kannst
du nicht löschen. Du bist doch nichts weiter als ein kleiner braver Duckmäuser. Und Admin bist du auch dass findest du bestimmt ganz toll..
hilfe!

Könntest Du Dich jetzt mal bitte ein bisschen zusammenreißen, denn lange wird sich das Team so etwas wohl dann nicht ansehen, auch wenn wir sehr freizügig sind, was die Ausdrucksweise in den Posts angeht ....
Aber ich denke, das meiste werden die User hier schon erledigen ...