 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cybermonkey342

Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 31.01.2016, 11:13 Titel: Pulsar2D Spiele-Framework |
|
|
Ich möchte euch heute mein Projekt "Pulsar2D" vorstellen, das ich nun endlich für FreeBASIC portiert habe. (Homepage: http://pulsar2d.org/)
Pulsar2D ist ein Spiele-Framework, das die SDL2 Bibliotheken nutzt (aktuell SDL2, SDL2_Image und SDL2_Mixer).
Das Projekt entstand als Weiterführung von EGSL (Easy Game Scripting with Lua), das damals die SDL1.2 Libs nutzte. Wie der Name schon sagt war EGSL ein Lua Interpreter, mit dem man einfach 2D-Spiele erstellen konnte. Nun gibt es zu Pulsar2D auch PulsarLua, ein Lua Interpreter, der Pulsar2D nutzt. Dieser Interpreter ist mit FreePascal entwickelt. Genauso lässt sich Pulsar2D mit FreePascal nutzen, wenn man sich die Source-Code-Version herunterlädt.
Nun kommen wir aber zu FreeBASIC: ich wollte damit kleine 2D-Spiele schreiben, habe aber schnell bemerkt, dass dies mit den Standardfunktionen nicht sehr komfortabel ist. Abgesehen davon, wird es spätestens bei der Soundausgabe etwas knifflig. Da die neuen Versionen von FreeBASIC mit SDL2-Header kommen, dachte ich mir, dass ich ja versuchen könnte mein Framework zu portieren. Nunja, es hat geklappt. Dazu musste ich allerdings einige FreeBASIC-Funktionen ausschalten (z.B. circle, color, line und auf Windows einige API-funktionen), was tadellos funktioniert, man aber natürlich nicht auf diese Funktionen zurückgreifen sollte.
Was bietet nun aber Pulsar2D:
- auf den meisten Grafikkarten ist Hardware-Beschleunigung aktiviert
- einfaches Animationssystem
- einfaches Pratikelsystem
- einfache Nutzung von Bitmap-Fonts
- es können mehrere Fenster genutzt werden
- der gleiche Code kann für Windows und Linux genutzt werden
- zwei eingebaute 8x8 Pixel-Fonts (Serif und Sansserif), dessen Größe veränderbar ist
- der Fokus liegt auf Retro-Spielen
- Nicht zu vergessen: Programmiere in Lua, FreePascal oder FreeBASIC
Hier als Beispiel ein Programm, mit dem ein Bitmapbild in ein Sprite konvertiert wird und man es mit den Cursortasten bewegen kann:
Code: |
' shows how to load an image and turn that into a sprite
#include once "pulsar2d.bi"
using p2d
TYPE player
x as integer
y as integer
image as p2d.sprite
END TYPE
dim win as p2d.window
dim image as p2d.image
dim grass as p2d.sprite
dim key as integer
dim knight as player
win = openwindow ("Simple Sprite Example",-1,-1,800,600)
setactivewindow (win)
setframetimer (100)
image = loadimage ("media/sprite.bmp")
knight.image = createsprite (image)
freeimage (image)
image = loadimage ("media/grass.bmp")
grass = createsprite (image)
freeimage (image)
knight.x=windowwidth/2
knight.y=windowheight/2
textsize (2)
do
key=p2d.getkey()
clearwindow()
if keystate (SDL_SCANCODE_RIGHT) then
knight.x=knight.x+1
end if
if keystate (SDL_SCANCODE_LEFT) then
knight.x=knight.x-1
end if
if keystate (SDL_SCANCODE_UP) then
knight.y=knight.y-1
end if
if keystate (SDL_SCANCODE_DOWN) then
knight.y=knight.y+1
end if
for i as integer = 0 to windowwidth() step spritewidth (grass)
for j as integer = 0 to windowheight() step spriteheight (grass)
drawsprite (grass,i,j,1,1,0,false,false)
next
next
drawsprite (knight.image,knight.x,knight.y,1,1,0,false,false)
color (255,255,255,255)
drawtext ("Cursor keys to move knight, ESC to quit",0,0)
sync()
loop until key = SDL_SCANCODE_ESCAPE
freesprite (knight.image)
freesprite (grass)
closewindow (win)
closeapplication()
|
Da man getkey und inkey nicht "ausschalten" kann, muss da bei der Pulsar2D-Version natürlich das Präfix davor, also p2d.getkey oder p2d.inkey.
 _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
 |
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 31.01.2016, 17:03 Titel: |
|
|
Also wenn ich die Beispiele fuer FreeBASIC-64Bit-Linux Compiliere, erhalte ich ne ganze latte an Warnungen (Passing different pointer types ...).
Das liegt daran, dass ein paar SDL-Sub's als Argumente "LONG PTR" erwarten, Du aber Integer uebergibst. Ob es auf einem 32Bit-System auch eine Warnung gibt?
Da sind long und integer gleich lang, aber auf nem 64Bit-System nicht! |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 31.01.2016, 19:37 Titel: |
|
|
Hallo Cybermonkey342
Ich wollte dein Beispielprogramm mit Win XP/32 testen, aber mir fehlt die pulsar2d.bi. In meiner FB 1.04.0 - Installation ist diese Bibliothek definitiv nicht vorhanden, und auf deiner Homepage habe ich sie auch nicht gefunden.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 31.01.2016, 20:31 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Ich wollte dein Beispielprogramm mit Win XP/32 testen, aber mir fehlt die pulsar2d.bi. In meiner FB 1.04.0 - Installation ist diese Bibliothek definitiv nicht vorhanden, und auf deiner Homepage habe ich sie auch nicht gefunden. |
Ich nehme an deswegen:
Pulsar2D Homepage hat Folgendes geschrieben: | If you’ll use FreePascal or FreeBASIC you’ll need to download the source code. |
Lesen bildet
Also kompilieren kann ich es schon, aber laufen tut es nicht (das Beispielprogramm oberhalb):
http://imgur.com/3Qmmbbk
Habe auch noch die anderen Beispielprogramme getestet (die im Source-Paket enthalten waren) und diese geben auch diesen Fehler aus.
"particlesdemo.bas" kompiliert gar nicht. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Cybermonkey342

Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 31.01.2016, 20:47 Titel: |
|
|
Danke für das Feedback.
@Elor: Danke, habe ich inzwischen gefixt. Kam sicher von meiner Portierung von Pascal her, da nehme ich Integer und es gibt keine Warnungen.
@St_W: Hast du mal probiert, ob das Spiel Astrorocks HD bei dir läuft? Wenn es klappt, können wir vielleicht den Fehler eingrenzen. _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 31.01.2016, 20:53 Titel: |
|
|
Cybermonkey342 hat Folgendes geschrieben: | @St_W: Hast du mal probiert, ob das Spiel Astrorocks HD bei dir läuft? Wenn es klappt, können wir vielleicht den Fehler eingrenzen. |
Nein, läuft auch nicht:
http://imgur.com/JUIjV87
//edit: das obig verwendete OS war übrigens Windows 10 (64-Bit).
Habs nun auch unter Debian ausprobiert und hier laufen die Beispielprogramme (am selben PC). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 01.02.2016, 00:04 Titel: |
|
|
St_W hat Folgendes geschrieben: | Lesen bildet zwinkern | Stimmt, ich hatte nur "Windows 32 Bit" heruntergeladen.
Nachdem ich das Versäumte nachgeholt und alles in ein eigenes Unterverzeichnis kopiert habe, compiliert und läuft das Ganze ohne Probleme (WinXP/32, SP3 und FB von 1.02.0 bis 1.04.0).
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Cybermonkey342

Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 01.02.2016, 22:15 Titel: |
|
|
St_W hat Folgendes geschrieben: | Cybermonkey342 hat Folgendes geschrieben: | @St_W: Hast du mal probiert, ob das Spiel Astrorocks HD bei dir läuft? Wenn es klappt, können wir vielleicht den Fehler eingrenzen. |
Nein, läuft auch nicht:
http://imgur.com/JUIjV87
//edit: das obig verwendete OS war übrigens Windows 10 (64-Bit).
Habs nun auch unter Debian ausprobiert und hier laufen die Beispielprogramme (am selben PC). |
Also irgendwie kann er unter Windows den beschleunigten Renderer nicht erstellen. Ich lade gerade nochmals etwas veränderte Sourcen hoch, probiere es nochmals damit, oder ändere Zeile 201 der p2dvideo.bi in folgenden Code:
Code: | renderer = SDL_CreateRenderer(windowg, -1, 0 ) |
Kommt eine Fehlermeldung beim Kompilieren von particlesdemo.bas? _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 02.02.2016, 00:35 Titel: |
|
|
Cybermonkey342 hat Folgendes geschrieben: | Also irgendwie kann er unter Windows den beschleunigten Renderer nicht erstellen. Ich lade gerade nochmals etwas veränderte Sourcen hoch, probiere es nochmals damit, oder ändere Zeile 201 der p2dvideo.bi in folgenden Code:
Code: | renderer = SDL_CreateRenderer(windowg, -1, 0 ) |
|
Auf meiner ToDo
//edit: habs jetzt mit Erfolg ausprobiert. Vielleicht sollte man das mit einer Warnungs-MessageBox als Fallback einbauen?
Ich bin der Ursache nachgegangen und hab festgestellt, dass der standardmäßig installierte Windows 10 Grafikkarten-Treiber für meine alte integrierte Intel Grafik nix kann. Hab jetzt einen älteren Treiber gefunden, der sich hat installieren lassen (Treibersignatur ) und jetzt funktioniert auch AstroRocks.
Interessanterweise benötigt das Mandelbrot-Fraktal-Beispiel aber nun über 6000ms zum Rendern anstatt wie vorhin (mit dem vorigen Treiber ohne HW Beschleunigung) 150ms.
Ich wollte auch die MESA OpenGL Implementierung (also Software rendering) ausprobieren (MSYS2 build) aber das Programm crasht damit.
Cybermonkey342 hat Folgendes geschrieben: | Kommt eine Fehlermeldung beim Kompilieren von particlesdemo.bas? |
Ja, sogar einige. Hätte gedacht das Problem müsste bei dir auch auftreten da einige Methoden offenbar nicht deklariert sind:
particlesdemo.bas compilation hat Folgendes geschrieben: | stw@debian:~/fb/pulsar2d$ fbc particlesdemo.bas
particlesdemo.bas(22) error 41: Variable not declared, setsimpleparticlesize in 'setsimpleparticlesize (partsize,rrandom)'
particlesdemo.bas(23) error 41: Variable not declared, SetSimpleParticleImage in 'SetSimpleParticleImage (mysprite)'
particlesdemo.bas(33) error 41: Variable not declared, resetsimpleparticles in 'resetsimpleparticles()'
particlesdemo.bas(34) error 41: Variable not declared, setsimpleparticletype in 'setsimpleparticletype(ptFillBox)'
particlesdemo.bas(3 error 3: Expected End-of-Line, found 'resetsimpleparticles' in 'resetsimpleparticles()'
particlesdemo.bas(39) error 3: Expected End-of-Line, found 'setsimpleparticletype' in 'setsimpleparticletype(ptFillCircle)'
particlesdemo.bas(43) error 3: Expected End-of-Line, found 'resetsimpleparticles' in 'resetsimpleparticles()'
particlesdemo.bas(44) error 3: Expected End-of-Line, found 'setsimpleparticletype' in 'setsimpleparticletype(ptBox)'
particlesdemo.bas(4 error 3: Expected End-of-Line, found 'resetsimpleparticles' in 'resetsimpleparticles()'
particlesdemo.bas(49) error 3: Expected End-of-Line, found 'setsimpleparticletype' in 'setsimpleparticletype(ptCircle)'
particlesdemo.bas(49) error 132: Too many errors, exiting
|
_________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Cybermonkey342

Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 02.02.2016, 17:57 Titel: |
|
|
Jessas, da habe ich die falsche Beispieldatei beigelegt ... Du kannst einfach das "simple" wegnehmen, oder folgenden Code nutzen:
Code: | #include once "pulsar2d.bi"
using p2d
dim win as p2d.window
dim partsize as integer = 3
dim key as integer
dim mysprite as p2d.sprite
dim mouse as p2d.sprite
win = openwindow ("Pulsar2D in FreeBASIC",-1,-1,1366,768)
setactivewindow (win)
setvirtualsize (1366,768)
backcolor (0,0,0,255)
setframetimer (100)
hidemouse()
mysprite = loadsprite ("media/particle.png")
mouse = loadsprite ("media/bluepointer.png")
spritecolor (mysprite, 255,200,0,55)
setparticlesize (partsize,ptRandom)
SetParticleImage (mysprite)
textsize (2)
texttype (2)
do
clearwindow
key=p2d.getkey()
color (255,255,0,255)
drawtext ("Press 1-6 for particle type, press left mousbutton to draw, ESC to quit.",0,0)
if key = SDL_SCANCODE_1 then
resetparticles()
setparticletype(ptFillBox)
end if
if key = SDL_SCANCODE_2 then
resetparticles()
setparticletype(ptFillCircle)
end if
if key = SDL_SCANCODE_3 then
resetparticles()
setparticletype(ptBox)
end if
if key = SDL_SCANCODE_4 then
resetparticles()
setparticletype(ptCircle)
end if
if key = SDL_SCANCODE_5 then
resetparticles()
setparticletype(ptDot)
end if
if key = SDL_SCANCODE_6 then
resetparticles()
setparticletype(ptImage)
end if
if key= SDL_SCANCODE_F then
togglefullscreen
resizewindow (1366,768)
end if
if mousebutton()=1 then
createparticles (mousex,mousey,30,150,255,200,0,55)
end if
drawsprite (mouse,mousex,mousey,1,1,0,false,false)
updateparticles()
if mousex >= windowwidth then
warpmouse (windowwidth,mousey)
end if
if mousey >= windowheight then
warpmouse (mousex,windowheight)
end if
sync()
loop until key=SDL_SCANCODE_ESCAPE
closewindow(win)
freesprite (mysprite)
freesprite (mouse)
closeapplication()
|
_________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
 |
h4tt3n
Anmeldungsdatum: 19.06.2007 Beiträge: 6
|
Verfasst am: 07.03.2017, 20:53 Titel: |
|
|
Siet toll aus, das werde ich ausprobieren - Habe genau beispiele von SDL2 in freebasic gesucht!
Grüsse, Michael |
|
Nach oben |
|
 |
Cybermonkey342

Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 14.03.2020, 20:46 Titel: |
|
|
Lange ist's her, aber Pulsar2D ist nicht tot. Die neue Homepage wird über http://pulsar2d.ga/ erreichbar sein, die.org-Domäne gibt es nicht mehr.
Zukünftig ist von mir geplant, nur noch FreeBASIC mit dem Framework zu unterstützen, also Pascal und Lua fallen weg.
Ich habe inzwischen AstroRocks HD mit FreeBASIC implementiert und auf itch.io hochgeladen: https://cybermonkey.itch.io/astrorocks-hd
(Evtl. werde ich der Einfachheit halber das Framework in Zukunft auch auf itch.io zum Download zur Verfügung stellen.) _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
 |
Cybermonkey342

Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 23.10.2020, 15:22 Titel: |
|
|
Nun ja, ohne Änderungen wäre das Leben ja langweilig.
Entgegen meiner Aussage von oben wird Free Pascal ebenfalls weiter unterstützt. Es fällt also nur Lua weg. Tatsächlich kann es in Spielen (auch 2D) einige zeitkritische Berechnungen bzw. Anzeigen geben, sodass Compiler einfach sinnvoller sind.
Neu ist ein Github-Repository, auf dem in Kürze der Download verfügbar sein wird: https://github.com/MarkusMangold/Pulsar2d
Momentan arbeite ich mich allerdings in MMBASIC auf dem Colour Maximite 2 ein, dazu gibt es von mir auch bereits einige kleine Beispiele: https://github.com/MarkusMangold/cmm2-examples (nur falls es jemanden interessieren sollte ...) _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|