Aktuelle Zeit: 12.07.2020 08:49

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 28.01.2019 22:43 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Update:

Bin jetzt vorläufig fertig mit dem Tile Interface :mrgreen:

Für jeden Spritesheet wird ein Tile Interface erstellt.
Jedes Tile kann einzeln oder als Animation gerendert werden.
Das Start/End Frame sowie die Animationszeit kann geändert werden.
Optional kann die Animation als Oneshot abgespielt werden.
Der Animationsmodus kann geändert werden.
Alle Tiles können auch auf ein Layer gepusht werden.

Interface:
Code:
;PureBasic v.5.62
Interface TILE
  TileWidth.f()
  TileHeight.f()
  TileCenterX.f()
  TileCenterY.f()
  TileResize.i(Width.f,Height.f)
  TileResetSize.i()
  Animate.i(Flag.b = -1)
  AnimateOnce.i(Flag.b = -1)
  FrameClock(Clock.i = -1)
  Frame.i()
  Frames.i()
  FrameStart.i(Index.i = -1)
  FrameEnd.i(Index.i = -1)
  FrameReset(Zero.b = #False)
  TileDraw.i(Index.i,X.f,Y.f,Center.b = #False,Alpha.a = #Null)
  TileDrawFx.i(Index.i,X.f,Y.f,Center.b = #False,Alpha.a = #Null,Angle.f = #Null,Tint.l = #Null)
  TilePushDraw(Layer.i,Index.i,X.f,Y.f,Center.b = #False,Alpha.a = #Null)
  TilePushDrawFx(Layer.i,Index.i,X.f,Y.f,Center.b = #False,Alpha.a = #Null,Angle.f = #Null,Tint.l = #Null)
  TileShape.i(Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Alpha.a = #Null)
  TileShapeFx.i(Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Alpha.a = #Null,Angle.f= #Null,Tint.l = #Null)
  TilePushShape(Layer.i,Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Alpha.a = #Null)
  TilePushShapeFx(Layer.i,Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Alpha.a = #Null,Angle.f = #Null,Tint.l = #Null)
  TileLight.i(Index.i,X.f,Y.f,Center.b = #False,Tint.l = #Null)
  TileLightFx.i(Index.i,X.f,Y.f,Center.b = #False,Angle.f = #Null,Tint.l = #Null)
  TilePushLight(Layer.i,Index.i,X.f,Y.f,Center.b = #False,Tint.l = #Null)
  TilePushLightFx(Layer.i,Index.i,X.f,Y.f,Center.b = #False,Angle.f = #Null,Tint.l = #Null)
  TileShapeLight.i(Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Tint.l = #Null)
  TileShapeLightFx.i(Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Angle.f = #Null,Tint.l = #Null)
  TilePushShapeLight(Layer.i,Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Tint.l = #Null)
  TilePushShapeLightFx(Layer.i,Index.i,X.f,Y.f,Width.f = #Null,Height.f = #Null,Center.b = #False,Angle.f = #Null,Tint.l = #Null)
  TileCreateCopy.i()
  Release.i()
EndInterface


Jetzt muss ich mir mal wieder Gedanken zur Anbindung der Engine an PureBasic machen.
Momentan wird der Render Context (bzw. das Hauptinterface) der Engine mit dem Fenster Handle (WindowID()) initialisiert.
Alle PureBasic Funktionen bleiben erhalten!

So wird die Engine (momentan) eingebunden:
Code:
;PureBasic v.5.62
Procedure.i Main(Title.s,Width.i,Height.i,ViewWidth.i,ViewHeight.i)
  Protected Window.i
  Protected WindowHandle.i
  Protected WindowFlags.i
  Protected WindowMsg.i
  ;--------------------------
  Protected *engine.ENGINE
  ;--------------------------
  WindowFlags|#PB_Window_SystemMenu|#PB_Window_ScreenCentered
  WindowFlags|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget
  WindowFlags|#PB_Window_SizeGadget
  Window = OpenWindow(#PB_Any,#Null,#Null,Width,Height,Title,WindowFlags)
  If Window
    WindowHandle = WindowID(Window)
    *engine = EngineCreate(WindowHandle,Width,Height,30);width and height here are the viewport size! - fps can be set freely between 30 and 80!
    If *engine
      Repeat
        Repeat
          WindowMsg = WindowEvent();PureBasics message & event handling stays fully intact!
          If WindowMsg = #PB_Event_CloseWindow
            Break 2
          EndIf
        Until WindowMsg = #Null
        *engine\RenderBegin()
        ;------------------------------------------
        ;//draw stuff
        ;------------------------------------------
        *engine\RenderEnd()
        EndIf
        If *engine\RenderClock();game timer - with deltatime & fps
          ;does not hog cpu like PureBasics SetFrameRate() (unusable) -> i made a bug report but so far it was not addressed!
          ;-> https://www.purebasic.fr/english/viewtopic.php?f=4&t=69315&hilit=SetFramerate
          Break
        EndIf
      ForEver
      *engine\Release();release all resources (includes all loaded sprites and tiles (spritesheets))
    EndIf
    CloseWindow(Window)
  EndIf
EndProcedure


Eventuell ist es besser Fenster mit der Engine zu erstellen als das Message-System von PureBasic umzuleiten.
Auch muss ich noch herausfinden wie ich FullScreen realisiere (#WS_POPUP + ChangeDisplaySettings_()).
Bin bei ~3000 lines of code :coderselixir:

Für Tipps und Anregungen zu FullScreen & eigenes Fenster ja/nein wäre ich dankbar (warum das PureBasic Fenster behalten?).

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 30.01.2019 21:39 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Update:
Eigentlich wollte ich eine Demo zum aktuellen Stand posten...
Jetzt bastel ich wieder an den Interfaces :roll:
Momentan bekommt jedes Sprite & Tile (Objekt) ein eigenes Interface.
Das ist schön und gut - allerdings wäre es besser ein Basis-Interface zu
verteilen und nicht jedes mal ein Neues zu erzeugen.
Also altes Interface handling raus und... :coderselixir:

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 30.01.2019 23:43 
Offline

Registriert: 29.08.2004 13:18
Ich würd das PB-Fenster behalten.
Ein Grund könnte bspw. sein, das man auch ein Menü drin haben möchte...

Es braucht halt eine "dostuff"-Funktion deiner Engine, die man in die Schleife einbauen kann.

Ansonsten mach ich das mit Vollbildschirm bei mir so (Fenster wird normal mit Rahmen und allen drum und dran erzeugt und jenachdem der Rahmen deaktiviert oder aktiviert.
Ist dann zwar nur ein "Fenster-Vollbildschirm" aber immerhin.

Code:
#StyleBorder=( #WS_BORDER|#WS_SIZEBOX|#WS_DLGFRAME)

StyleBorder= GetWindowLongPtr_(WindowID(win), #GWL_STYLE) & #StyleBorder
...
If config::var\FullScreen
    SetWindowLongPtr_(WindowID(win),#GWL_STYLE, GetWindowLongPtr_(WindowID(win),#GWL_STYLE) & ~#StyleBorder)
    SetWindowState(win,#PB_Window_Maximize)

  Else
    SetWindowLongPtr_(WindowID(win),#GWL_STYLE, GetWindowLongPtr_(WindowID(win),#GWL_STYLE) | #StyleBorder)
    SetWindowState(win,#PB_Window_Normal)

  EndIf 
...


Wird das eigentlich eine 2D-Engine (also flache Strukturen) oder 3D (mit Höhen)?

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 31.01.2019 08:53 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
GPI hat geschrieben:
Ich würd das PB-Fenster behalten.
Ein Grund könnte bspw. sein, das man auch ein Menü drin haben möchte...
...
Wird das eigentlich eine 2D-Engine (also flache Strukturen) oder 3D (mit Höhen)?


Danke @GPI,
ich werde nun weiter mit den PureBasic-Fenstern arbeiten.

Alles ist flach 2D.

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 02.02.2019 15:55 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Update:

Endlich ist der grafische Teil der Engine (OpenGL) soweit das getestet werden darf :D

Bild

Hatte bisher noch keine Zeit eine Anleitung für die Engine zu schreiben
aber die meisten Funktionen sind aber selbsterklärend.

Würde mich über Informationen zu eventuellen Bugs freuen :)

Beispiel Code (x86) mit Download Links:

CODE & LINKS ENTFERNT!
-> nicht mehr aktuell / relevant

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Zuletzt geändert von Mijikai am 24.02.2019 21:08, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 03.02.2019 13:01 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Update:
Jetzt geht es weiter mit der Kamera und dem Tile drawing (neues System).

Erste Tests:
- FPS < 60 wegen Aufnahme Software!
- Zoom schrittweise - kein Lag! (Mausrad)
Bild

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 03.02.2019 13:42 
Offline
Benutzeravatar

Registriert: 06.07.2017 12:24
Respektable Leistung, so far. :allright:

_________________
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 16.02.2019 07:33 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Update:

Es gibt viel zu tun :coderselixir:
Jetzt ist es möglich Lichter direkt in der Engine zu erstellen was vorher nur mit fertigen Texturen ging.
Es werden runde, quadratische und elliptische Lichter unterstützt (Radius als Switch -/0/+).

Code:
CreateLight(Width.i,Height.i,LightA.a,LightB.a,Radius.f = #Null)


Das Zeichnen der einzelnen Lichter geschieht weiterhin über das Sprite Interface.

Hier noch eine Demo mit vielen animierten Lichten (Framedrops wegen Aufnahmesoftware!)

Bild
>> Bild Groß <<

Nur ein Licht unterschiedlich gerendert.

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 24.02.2019 21:05 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Update:

Jetzt ist die Arbeit am grafischen Teil der Engine vorläufig beendet :D
Hab das Zeichnen nochmal komplett umgekrempelt alles basiert nun auf Textur Atlanten
was das Rendern weiter beschleunigen sollte.

Jetzt kommen (endlich) andere Dinge wie A* Pathfinding usw.
Aber jetzt spiele ich erst mal mit der Engine rum (zur Belohnung) um zu testen ob alles soweit funktioniert.

z.B.: Schrift rotiert, skaliert und eingefärbt - wird nun aus einem Atlas gerendert.
Bild

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Isometrische 2D Spiele-Engine
BeitragVerfasst: 18.03.2019 13:41 
Offline
Benutzeravatar

Registriert: 06.07.2017 12:24
Ist das mit der A*-Pfadsuche noch ein Thema? :)
Frage nur, weil ich hätte eine entsprechende Funktion vorliegen, die ich mal in Blitzbasic programmiert, und dann auch erfolgreich nach PureBasic übersetzt habe. Läuft flott und fehlerfrei. Alles was die Funktion braucht, ist ein Array vom entsprechenden Level, welches mit mit Nullen (Mauern/Hindernisse) und Einsen (frei) gefüllt ist.

_________________
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye