Spiele-Programmierfrage (Allgemein)

Für allgemeine Fragen zur Programmierung mit PureBasic.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Spiele-Programmierfrage (Allgemein)

Beitrag von ccode_new »

Hallo!

Ich wollte nur mal ganz kurz und ganz allgemein fragen ob hier jemand schon mal ein Spiel (klein, komplex - egal) mit PureBasic und "SDL2" oder der "raylib" programmiert hat, oder dabei ist ein Spiel zu programmieren, was eine dieser Bibliotheken nutzt.

Für Beides gibt es ja "Include-Dateien" für PureBasic.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von tft »

Hallo,

ich habe jetzt den 3. Anlauf für mein Spiel "Driving SchoolEvergarden". Wird ein 3D Game im Welltenraum.
raylib funktioniert bei mir nicht. Also bleibt mir nur noch B3D oder OGRE. Ich mache eine YouTube Reihe
wir das Spiel entsteht. Mal sehne was geht. Auf jeden Fall wünsche ich die viel Spaß.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von tft »

Hallo,
ich habe mir mal kurz SDL angeschaut. Und suche gerade eine Anleitung um die Funktionen in der DLL zu ergründen.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von ccode_new »

Hi,

dann ergründe die Funktionen mal, aber Achtung die SDL-Bibliothek ist keine Gameengine-Bibliothek.
Diese Programmierbibliothek ist weltweit aber eines der stabilsten und mächtigten platformübergreifenden Multimedia-Anwendungsframeworks was es gibt.

Es werden alle grundlegenden Funktionen mitgeliefert.

Für 2D - Games ist diese Bibliothek (denke ich) einfach genial, als solides Fundament für eine Gameengine.

Für 3D - Programme müsste man sich hierbei aber extrem stark mit OpenGl, etc. auseinander setzen.

Es gibt im Internet sehr viele Beispiele und gute Tutorial zu diesem Framework.

Auch die Dokumentation unter https://www.libsdl.org
ist sehr gut

Anbei:
Außerdem solltest du dich für ein Game durchaus mit Objekt-Orientierten Programmieren beschäftigen.
Ich denke es ist fundamental wichtig viele Dinge in eigene Namensräume (Module) zu packen und für die Verwendung von Objekten die mehrere Instanzen benötigen ist die Handhabung von Interfaces unter PureBasic sehr wichtig.

Schaue dir unbedingt die "renderer.pbi" und die "class.pbi" von GPI unter Verwendung der SDL2-Bibliothek an.
Zuletzt geändert von ccode_new am 02.09.2022 19:30, insgesamt 1-mal geändert.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von mk-soft »

Die Engine3d von pb kann man auch nehmen (Intern OpenGL)

Leider ist die dll bei PB v6.00 defekt.
Siehe Workaround: viewtopic.php?t=32747
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von tft »

Ich mache gerade einige Stress Test für mein Projekt. Das einzige das mir bisher wirklich fehlt. Ist den Entity einen Zeiger auf eigene Struktur Daten mitzugeben. Das würde vieles einfacher gestallten.

Und das Sprites nicht auf dem Logischen Schirm sondern auf die Near Fläche der Camera gerendert werden. Sprites mit ZBuffer ..... ist eigentlich ...
Na ja eine interessante Variante. Habe in letzter zeit im Englischen Forum so einige Fragen gestellt. Bis auf die Sache mit der Audio Ausgabe kam bisher nicht mal ein àààà Was meinst du? Aber es gibt für alles eine Lösung wenn man das Problem findet.

Wenn ich schonmal dabei bin. Kann ich ja mal hier Posten. Hat jemand eine Idee???

Bild
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von ccode_new »

Hallo!
Eine kleine Frage am Rande:
Hat jemand schon ma die "raylib" unter einem Raspberry Pi 4 mit Raspbian Buster - Linux OS zum laufen bekommen?

Also die Helper-Lib kompilieren und einbinden funktioniert.
Auch das kompilieren der Source (raylib 4.2.0) klappt.
Aber:
Ohne aktiven OpenGL-Treibern (#dtoverlay=vc4-kms-v3d auskommentiert!) kann man die RayLib nutzen, aber die FPS-Rate ist extrem unbrauchbar schlecht
Mit aktivierten OpenGL-Treiber (dtoverlay=vc4-kms-v3d oder dtoverlay=vc4-fkms-v3d) kann man die RayLib nur nutzen, wenn man die LIb so erstellt:

Code: Alles auswählen

make PLATFORM=PLATFORM_DESKTOP GRAPHICS=GRAPHICS_API_OPENGL_21
Zuvor sollte man cmake auch noch richtig konfigurieren. (z.B. mit cmake-gui).

Aber der Raspberry Pi 4 unterstützt nur maximal OpenGL 2.1 und nicht 3.3 oder 4.3.

Außerdem kommt es zu starken Rucklern und sehr niedrigen Frameraten.
Die Maus kann man auch teilweise gar nicht nutzen und auf Mausrad-Events wird gar nicht reagiert.
Zudem funktionieren die GUI-Beispiel und FONT-Beispiele nicht.
Dort kommt es zu einem Speicherzugriffsfehler bei " DrawTextEx" in Verbindung mit Default-Font-Nutzung (Schriften-Nutzung).
Bei der Verwendung von Schriften stürzen die Programme mit einem Speicherzugriffsfehler ab.
Zudem stimmen viele Funktionen und Strukturen in den PureBasic-Include-Dateien nicht (nicht mehr) mit den aktuellen raylib 4.2 -Include-Dateien überein.
Also insgesamt hat die raylib (und ganz besonders die PureBasic-Include-Version) sicherlich 1000te Bugs unter Verwendung eines RaspberryPi.

Von der SDL2 kann ich dies bis jetzt nicht so behaubten. (SDL2 rockt eigentlich ziemlich gut unter einem Raspberry Pi)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von ccode_new »

Anbei:
Die RayLib funktioniert ziemlich gut mit unter Raspian - Arm64.

kleine Änderungen:

Code: Alles auswählen

CompilerElseIf #PB_Compiler_Processor = #PB_Processor_Arm64
            ImportC "bin/libraylib_linux_pbhelper_arm64.a"
            EndImport
            ImportC "bin/libraylib.a"
            EndImport
            ImportC "-lc -lm -lpthread -ldl -lrt -lgbm -lEGL -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGLESv2 -lGL -ldrm -lglut"     
  ;...
  GetMouseWheelMove.rl_float() ;float!!!
  ;...
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benubi
Beiträge: 186
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von Benubi »

Hi Leute,

mit Raylib kenne ich mich 0% aus. Auch mit OpenGL habe ich noch nie etwas eigenständig gemacht oder abgetippt :( ABER zwangsläufig werde ich das ablaufen müssen.

Ich habe mir in PB eine "Mini-GUI Lib" gebastelt (ist eigentlich schon die 2e oder 3e), die ist leider sehr langsam weil ich von Sprite zu Sprite bzw. Bilder in Sprites render, und die anscheinend jedesmal hin und her kopiert werden (in der Linux/ScreenOutput() Hilfe steht auch, daß das sehr langsam ist.) SpriteOutput() funzt im Prinzip wie Screenoutput(), nur dass Sprites in der Regel kleiner sind, gelle? :freak: Auf Windows verursacht ein wechsel von DX auf OGL einen FPS Abfall von 60 auf 30, weil ich 1x den ScreenOutput benutze und/oder ein sehr großes Transparentes Sprite benutze, auf das die gesamte GUI gerendert wird.

Auf dem R400 liegt die FPS Rate der GUI bei gefühlt WEIT unter 1FPS :( Es sind zero FPS und ein paar zerquetschte.

Also habe ich auch in diesem Zusammenhang und Spieleprogrammierung gesucht und folgendes rausgefunden. Der ultimative Königsweg um eine FPS weit über 100 zu bekommen (wer's braucht), ist OpenGL zu benutzen, und das finale Sprite über einen Shader zu rendern. Fragt mich nicht was das bedeutet oder wie das genau geht. Aber die Logik wäre, um alle unnötigen Kopiervorgänge und blockierenden Befehle zu vermeiden: Alle Mal-Operationen finden nahe der CPU statt, also mit 2D Image bzw. selbstgebrauten copy/paste Sprite-Befehlen welche direkt in den Buffer (DrawingBuffer, nicht OGL/GraKa Buffer) schreiben würden. Soviel nur zur Theorie, es sollte aber ein super Trick sein, der auch auf andere Systeme portierbar wäre. Eine Herrausforderung läge hierbei beim genauen Timing zwischen den nichtblockierenden Befehlen und dem rechtzeitigen Framewechsel (genannt FlipBuffers(), daß dieser nicht zu früg erfolgt, vermutlich, und VSync gibt es bei einer FPS>160 vermutlich nicht, sofern dies eine Rolle spielt)...

Ich wollte sowieso eine neue GUI schreiben, und die sollte doch bitte so schön wie CEGUI sein - daher steckt diese noch in der Analysis Paralysis...

Dafür habe schreibe ich an einer mini-Datenbank, weil ich weit von GUI kurz abgedriftet bin... (ich dachte mir ich bräuchte ein Region/Quadtree und meine funktionierende Modelle sind aber keine Region trees)... Weil man solle erst "einfachere" Trees als Quadtrees probieren, meinte einer, und meinte AVL und Btrees... Ich finde die aber schon viel komplizierter bzw. Anspruchsvoller als Quadtrees, irgendwie. Glücklicherweise habe ich für AVL's portierbare codes gefunden, und diese kräftig ausgebaut und getestet. Für BTree gibts nichts Brauchbares auf Anhieb, was man so ohne Weiteres für meine Grundlagenforschung verwenden könnte - mit meinem Suchgkück.


Ich habe die Leistung von PC und R400 ein wenig verglichen, wie man Äpfel und Birnen halt vergleichen kann. Es ist alles bedeutend langsamer, und ich lese hier und da SDL sei aber langsam, insbesondere für Desktop Bezogenes. Macht bitte nicht doofe tests wie die auf youtube. Ihr müsste das VNC Fenster auf dem PC minimieren oder schließen während des Tests, der VNC Server und Xorg verballern 30-50% von einem CPU Kern, mindestens, wenn ihr hohe Frameraten habt und viel sich auf dem Monitor ändert. Filme über VNC konnte ich nicht ruckelfrei sehen (bei einer Auflösung von 1920x1080 geht das nicht), weil der VNC Server einfach nicht hinterher kommen kann.


Dann möchte ich noch was anmerken, es gibt anscheinend 2 OpenGL's auf dem R400, zumindest in VLC Player zur Auswahl. Benutzt das OpenGL for embedded systems v2 explizit, und wählt den Monitor Ausgang explizit aus, sofern ihr einen habt. So kann VLC bei unter 20% arbeiten, bei normalen OpenGL schon ca. 150% CPU Leistung (also mehr als ein Kern, vermute ich), und mit den anderen Modi geht das noch viel schneller nach oben; weil anscheinend zwischen den verschiedenen Software-Layern rumkonvertiert und kopiert. Was auch der Grund ist, weshalb einige Sachen langsam in SDL/Desktop sein können (meine Vermutung).

Lange Rede kurzer Sinn, aber ich denke meine Erfahrungen können auch dem Einen oder Anderen nützlich sein...
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Spiele-Programmierfrage (Allgemein)

Beitrag von ccode_new »

Hallo!

Also mit der SDL2-Lib oder der RayLib sind auch bei sehr vielen Sprites (Texturen = VRAM) und diverser Eventbearbeitungen mit aktiven OpenGL2.1 -Treibern (KMS) sehr gut konstante 60FPS auf dem Raspi 4/400 möglich. Hierbei spielt natürlich die Texturgöße eine wichtige Rolle und außerdem Rede ich hierbei nur von 2D-Grafik mit bisschen Hintergrund-Gedöns.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten