Spiele-Rumpfprogramm

Für Fragen von Einsteigern und Programmieranfängern...
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Spiele-Rumpfprogramm

Beitrag von pluto »

Was kann man dagegen tun?
Eine Möglichkeit ist z.b. nicht in einem Intervall Alles neu zu Zeichnen, sondern nur die Teile die sich geändert haben. Ob das immer Möglich ist, hängt vom Spiel ab. Z.B. bei einem ScrollShooter ist das nicht Möglich. Bei einem Auto Spiel, wäre es vielleicht Möglich, dadurch wird schon sehr viel Zeit Eingespart. Eine weitere Möglichkeit ist, dass Rendern, auszulagern in einem Extra Thread. Das bringt zwar keine oder nur kaum CPU Ersparnisse, aber dadurch wird die Haupt Anwendung nicht beeinträchtigt. Außerdem kann man in einem Extra Thread mit sleep arbeiten. Das entlasten die CPU enorm.

Die meiste Zeit geht logischerweise beim Rendern Verloren. D.H, hier muss man mit den Optimierungen Ansetzten. Es gibt bestimmt noch mehr Möglichkeiten. Die in der Summe was bringen, aber einzeln wenig Effekt haben. Z.b. sollten beim Rendern keine Klassen ständig erstellt werden, und am ende wieder frei gegeben werden. Unnötige Abfragen sollten vermieden werden. und und und....

Um in das Thema Spiele Entwicklung rein zu kommen, würde ich dir zu was einfacherem Raten. Es klingt zwar lächerlich, ich weiß, aber ein Snake, Breakout und CO bieten genügend Herausforderungen am Anfang.
Diese Spiele lassen sich auch mit Leichtigkeit mit Canvas erstellen.
Kann man OpenGL auch einfach nur mit Lazarus zum Laufen bringen?
Schon. Ist aber Aufwendiger. Alleine das Installisieren von OpenGL verschlingt schon locker über 500 bis 1000 Code Zeilen(Genau weiß ich das nicht mehr). Gut, dass machst du nur einmal und kannst es wieder verwenden. Aber bevor du auch nur ein kleines Viereck siehst, brauchst du schon recht lange. Am ende hast du dann keine Lust mehr für das eigentliche Spiel. Daher ist es einfach, was Fertiges zu nehmen. Wenn du die DelphiGL-Lib verwendest, kannst du direkt mit OpenGL programmieren. Wenn du Andorra, GLSCene verwendest ist das eher indirekt. GLUT ist im Übrigen reines OpenGL. Meines Wissens. XLIB brauchst du meine ich nicht.

Aber entscheide selbst, was das beste für dich ist. Wir können nur unsere Meinungen dazu Äußeren. Ich denke, hier im Forum findest du für jede Klasse einige Personen, die sich damit auskennen. Daher wäre das kein Problem, sich alles der reihe nach anzuschauen. Aber ich hoffe dir ist klar, so ein Auto Spiel wird nicht von heute auf morgen geschrieben. Das braucht Zeit.
MFG
Michael Springwald

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Spiele-Rumpfprogramm

Beitrag von 400kmh »

pluto hat geschrieben:
Was kann man dagegen tun?
Eine Möglichkeit ist z.b. nicht in einem Intervall Alles neu zu Zeichnen, sondern nur die Teile die sich geändert haben.
Bei einem anderen Programm könnte mir das auch nützen. In diesem Programm soll sich beim Bewegen der Maus über ein Image, ein bestimmter Teil des Images ändern. Wenn das OnMouseMove-Ereignis ausgelöst wird, wird das gesamte Image jedoch erst einmal schwarz, sodass alles neu gezeichnet werden muss. Gibt es dafür eine Lösung?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Spiele-Rumpfprogramm

Beitrag von pluto »

Kommt drauf an, wie du es geschrieben hast. Aber Eigentlich dürfte es nicht schwarz werden.
MFG
Michael Springwald

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Spiele-Rumpfprogramm

Beitrag von 400kmh »

pluto hat geschrieben:Kommt drauf an, wie du es geschrieben hast. Aber Eigentlich dürfte es nicht schwarz werden.
Ich habe mir die Sache nochmal genau angeschaut. Das Problem scheint ein anderes zu sein: Solange die OnMouseMove-Prozedur nicht beendet ist ändert sich das Bild gar nicht. Wenn sie beendet ist, wird das Bild dann überarbeitet. Soweit so gut. Dabei kommt es jedoch zu Flackern, wenn zu viel überarbeitet werden muss. Nachdem das alte Bild gelöscht ist, ist nämlich kurz alles weiß, bevor dann das überarbeitete Bild erscheint. Kann man dieses weiße Aufflackern verhindern?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Spiele-Rumpfprogramm

Beitrag von pluto »

Nun: Du musst wie immer bei sowas zunächst in einem Buffer zeichnen und am ende aus diesen Buffer Kopieren. Dann Flackert es auch nicht mehr. Der Buffer ist dabei so groß wie die "Anzeige" Fläche.
MFG
Michael Springwald

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Spiele-Rumpfprogramm

Beitrag von 400kmh »

pluto hat geschrieben:Nun: Du musst wie immer bei sowas zunächst in einem Buffer zeichnen und am ende aus diesen Buffer Kopieren
Wie zeichnet man in einen Buffer, und wie kopiert man aus einem solchen Buffer?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Spiele-Rumpfprogramm

Beitrag von Christian »

http://wiki.freepascal.org/Developing_with_Graphics/de" onclick="window.open(this.href);return false;
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Cybermonkey342
Beiträge: 109
Registriert: Sa 1. Mär 2008, 15:19
OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
CPU-Target: x64
Kontaktdaten:

Re: Spiele-Rumpfprogramm

Beitrag von Cybermonkey342 »

Nur zum Verständnis: Soll das Endergebnis in etwa so aussehen wie auf diesem Screenshot? (Nur halt mit Splitscreen?)
Bild
Mit besten Grüßen,
Cybermonkey

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Spiele-Rumpfprogramm

Beitrag von carli »

Für solche Sachen kann ich dir SDL empfehlen.
Für die gedrehten Autos nimmst du dann sdl_gfx

Cybermonkey342
Beiträge: 109
Registriert: Sa 1. Mär 2008, 15:19
OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
CPU-Target: x64
Kontaktdaten:

Re: Spiele-Rumpfprogramm

Beitrag von Cybermonkey342 »

carli hat geschrieben:Für solche Sachen kann ich dir SDL empfehlen.
Für die gedrehten Autos nimmst du dann sdl_gfx
Yep, genau. Wenn du es etwas einfacher haben willst kannst du ja meine egslengine benutzen, die quasi als Wrapper fungiert. Beschleunigt den Entwicklungsprozess jedenfalls um einiges...
Hier ein kleiens Beispiel, wie man mit den Cursortasten ein Sprite auf dem Bildschirm bewegt:

Code: Alles auswählen

{$apptype gui}
 
program spriterecord;
 
uses egslengine,sysutils;
 
type sprite=record
	 image:pointer;
	 x,y:integer
end;
 
var player : sprite;
	key:integer;
BEGIN
openwindow (640,480,32,'Image as Record Test');
setframetimer (70);
player.image := loadimage ('sprite.bmp');
player.x:=320;
player.y:=240;
repeat
  clearscreen;
  key:=getkey();
  if keystate (274) then player.y:=player.y+1;
  if keystate (273) then player.y:=player.y-1;
  if keystate (275) then player.x:=player.x+1;
  if keystate (276) then player.x:=player.x-1;
  putimage (player.x, player.y, player.image);
  sync();
until key=27;
closewindow();
END.
Mit besten Grüßen,
Cybermonkey

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Spiele-Rumpfprogramm

Beitrag von 400kmh »

Danke, das muss sich mir erst mal durchlesen und ausprobieren.
Cybermonkey342 hat geschrieben:Nur zum Verständnis: Soll das Endergebnis in etwa so aussehen wie auf diesem Screenshot? (Nur halt mit Splitscreen?)
Bild
Nein, vor einigen Monaten habe ich mich schon mal an dem Programm versucht. Damals sah das Zwischenergebnis so aus:

http://img279.imagevenue.com/img.php?im ... _212lo.png" onclick="window.open(this.href);return false;
Zuletzt geändert von 400kmh am Sa 9. Jul 2011, 20:48, insgesamt 1-mal geändert.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Spiele-Rumpfprogramm

Beitrag von carli »

(Bloß als Anmerkung: http://www.das-dass.de/" onclick="window.open(this.href);return false;)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Spiele-Rumpfprogramm

Beitrag von pluto »

Nein, vor einigen Monaten habe ich mich schon mal an dem Programm versucht. Damals sah das Zwischenergebnis so aus:
Nicht schlecht. Genau sowas ähnliches hatte ich auch mal Angefangen: Skyroades. Hier: http://www.pluto.lazarusforum.de/15.05. ... yroads.zip" onclick="window.open(this.href);return false;
das ist zwar nicht so sauber geschrieben, es war nur ein Tests.

Hier noch mal vielen Dank an U-Boot, der mir das mit den 3D Punkten erklärt hat. Aber im Prinzip dürfte es das sein, was du machen wolltest.
MFG
Michael Springwald

Antworten