Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Pulsar2D Spiele-Framework

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 9
Wohnort: Freiburg

BeitragVerfasst am: 31.01.2016, 12:13    Titel: Pulsar2D Spiele-Framework Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 31.01.2016, 18:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 836
Wohnort: Ruhrpott

BeitragVerfasst am: 31.01.2016, 20:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 910
Wohnort: Austria

BeitragVerfasst am: 31.01.2016, 21:31    Titel: Antworten mit Zitat

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 zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 9
Wohnort: Freiburg

BeitragVerfasst am: 31.01.2016, 21:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 910
Wohnort: Austria

BeitragVerfasst am: 31.01.2016, 21:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 836
Wohnort: Ruhrpott

BeitragVerfasst am: 01.02.2016, 01:04    Titel: Antworten mit Zitat

St_W hat Folgendes geschrieben:
Lesen bildet zwinkern
Stimmt, ich hatte nur "Windows 32 Bit" heruntergeladen. peinlich

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). lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 9
Wohnort: Freiburg

BeitragVerfasst am: 01.02.2016, 23:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 910
Wohnort: Austria

BeitragVerfasst am: 02.02.2016, 01:35    Titel: Antworten mit Zitat

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 lächeln
//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 traurig ) 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(3cool 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(4cool 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
Benutzer-Profile anzeigen Private Nachricht senden
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 9
Wohnort: Freiburg

BeitragVerfasst am: 02.02.2016, 18:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
h4tt3n



Anmeldungsdatum: 19.06.2007
Beiträge: 6

BeitragVerfasst am: 07.03.2017, 21:53    Titel: Antworten mit Zitat

Siet toll aus, das werde ich ausprobieren - Habe genau beispiele von SDL2 in freebasic gesucht! lächeln

Grüsse, Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz