SimpleIso - Isometrie auf "Einfach"
Tilebasierte Kollision

Hallo miteinander,
es wurde Tilebasierte-Kollision hinzugefügt.
Wie funktioniert das?
Ein Entity "besetzt" jenes Tile, welches sich unter ihm befindet. Somit kann kein zweites Entity dieses Tile betreten.
Diese Methode der Kollisionen hat den entscheidenden Vorteil, dass sie sehr schnell ist und wenig CPU-Leistung "frisst".
Wie auf dem unteren Bild zu sehen, werden hier ALLE 34 000 Entitys zugleich auf "Kollision" überprüft, und dies immernoch bei moderaten 50 FPS.
es wurde Tilebasierte-Kollision hinzugefügt.
Wie funktioniert das?
Ein Entity "besetzt" jenes Tile, welches sich unter ihm befindet. Somit kann kein zweites Entity dieses Tile betreten.
Diese Methode der Kollisionen hat den entscheidenden Vorteil, dass sie sehr schnell ist und wenig CPU-Leistung "frisst".
Wie auf dem unteren Bild zu sehen, werden hier ALLE 34 000 Entitys zugleich auf "Kollision" überprüft, und dies immernoch bei moderaten 50 FPS.
Performance verbesserung

Hallöchen,
die letzten 2 Tage war ich damit beschäftigt, viele Ideen auszuprobieren, welche die Render- und Update routinen performancetechnisch verbessern sollen.
Nun können DEUTLICH mehr Entitys erstellt werden ohne performanceverluste zu spüren.
400 000 Entitys sind nun kein Problem. Ab ca. 380 000 fingen die FPS an, leicht zu schwinden. (Natürlich hängt das stark von der Hardware ab)
Ich werde weiterhin testen, ob noch mehr rauszuholen ist.
MfG Trust
die letzten 2 Tage war ich damit beschäftigt, viele Ideen auszuprobieren, welche die Render- und Update routinen performancetechnisch verbessern sollen.
Nun können DEUTLICH mehr Entitys erstellt werden ohne performanceverluste zu spüren.
400 000 Entitys sind nun kein Problem. Ab ca. 380 000 fingen die FPS an, leicht zu schwinden. (Natürlich hängt das stark von der Hardware ab)
Ich werde weiterhin testen, ob noch mehr rauszuholen ist.
MfG Trust
Animationen

Hallo Leute,
es wurden Animationen von Tiles und Entitys hinzugefügt.
Wie läuft das ganze ab?
Ähnlich wie in Blitz3D, werden Animations-sequenzen erstellt, und diese dann den Entitys oder Tiles zugewiesen.
Diese einmal zugewiesen, laufen sie automatisch ab und müssen nicht vom Nutzer extra in einer Schleife
aktualisiert werden.
Möchte man die Animation im Nachhinein ändern (momentan nur stoppen, resumen und die Geschwindigkeit ändern) muss dies nur einmal getan werden.
Man kann dieselbe Animationssequens mehreren Entitys zuweisen und diese werden dann seperat von SimpleIso gehandhabt.
Möchte man zB. 10 gleiche Monster-Entitys erstellen, braucht man nur eine Animationssequenz erstellen, und kann diese dann allen 10 Monstern zuweisen. (Insofern diese, alle die selbe Animationssequenz haben sollen) Nun kann man die Animation für jedes Monster seperat manipulieren.
Folgend die neuen Funktionen die hinzugefügt wurden:
Map Funktionen
Weist einem Tile eine Animation zu. Wenn der Parameter "anim" gleich "Null" wird stattdessen die Animation zurückgegeben
sTileAnim:sTAnimSeq(tileX:Int, tileY:Int, layer:Int, anim:sTAnimSeq = Null)
Entity Funktionen
Weist einem Entity eine Animation zu. Wenn der Parameter "anim" gleich "Null" wird stattdessen die Animation zurückgegeben
sEntityAnim:sTAnimSeq(entity:sTEntity, anim:sTAnimSeq = Null)
Animationen
Erstellt eine neue Animationssequenz. "animDelay" is die Zeit zwischen zwei Animationsframes - Umso größer der Wert, desto langsamer die Animation.
sCreateAnimSeq:sTAnimSeq(startFrame:Int, endFrame:Int, animDelay:Float = Null)
Verändert die Animationsgeschwindigkeit.
Wenn "animDelay gleich "Null" wird stattdessen die Zeit zurückgegeben
sAnimDelay:Float(anim:sTAnimSeq, animDelay:Float = Null)
Gibt zurück, wie oft eine Animation schon durchlaufen ist
sAnimTimes:Int(anim:sTAnimSeq)
Stoppt eine laufende Animation
sAnimStop(anim:sTAnimSeq)
Startet eine gestoppte Animation
sAnimResume(anim:sTAnimSeq)
Gibt zurück, ob eine Animtion grade läuft oder nicht
sAnimPlaying:Byte(anim:sTAnimSeq)
Fps Funktionen
Erstellt einen Fps-Zähler
sCreateFpsTimer()
Aktualiesiert den Fps-Zähler
sUpdateFps()
Resettet den Fps-Zähler
sResetFps()
Gibt die Fps auf dem Bilschirm an der Position x und y aus
sShowFps(x:Float, y:Float)
Liefert die Fps zurück
sFpsValue:Int()
es wurden Animationen von Tiles und Entitys hinzugefügt.
Wie läuft das ganze ab?
Ähnlich wie in Blitz3D, werden Animations-sequenzen erstellt, und diese dann den Entitys oder Tiles zugewiesen.
Diese einmal zugewiesen, laufen sie automatisch ab und müssen nicht vom Nutzer extra in einer Schleife
aktualisiert werden.
Möchte man die Animation im Nachhinein ändern (momentan nur stoppen, resumen und die Geschwindigkeit ändern) muss dies nur einmal getan werden.
Man kann dieselbe Animationssequens mehreren Entitys zuweisen und diese werden dann seperat von SimpleIso gehandhabt.
Möchte man zB. 10 gleiche Monster-Entitys erstellen, braucht man nur eine Animationssequenz erstellen, und kann diese dann allen 10 Monstern zuweisen. (Insofern diese, alle die selbe Animationssequenz haben sollen) Nun kann man die Animation für jedes Monster seperat manipulieren.
Folgend die neuen Funktionen die hinzugefügt wurden:
Map Funktionen
Weist einem Tile eine Animation zu. Wenn der Parameter "anim" gleich "Null" wird stattdessen die Animation zurückgegeben

Entity Funktionen
Weist einem Entity eine Animation zu. Wenn der Parameter "anim" gleich "Null" wird stattdessen die Animation zurückgegeben

Animationen
Erstellt eine neue Animationssequenz. "animDelay" is die Zeit zwischen zwei Animationsframes - Umso größer der Wert, desto langsamer die Animation.

Verändert die Animationsgeschwindigkeit.
Wenn "animDelay gleich "Null" wird stattdessen die Zeit zurückgegeben

Gibt zurück, wie oft eine Animation schon durchlaufen ist

Stoppt eine laufende Animation

Startet eine gestoppte Animation

Gibt zurück, ob eine Animtion grade läuft oder nicht

Fps Funktionen
Erstellt einen Fps-Zähler

Aktualiesiert den Fps-Zähler

Resettet den Fps-Zähler

Gibt die Fps auf dem Bilschirm an der Position x und y aus

Liefert die Fps zurück

SimpleIso für BMax

Hallo Leute.
SimpleIso wird eine Iso-Engine für BMax für "jederman".
SimpleIso wird als Modul vorliegen, welches dann nur importiert werden muss.
Der momentane Stand von SimpleIso ist "benutzbar", allerdings fehlt noch einiges an "SchnickSchnack" um es dem Benutzer "NOCH" einfacher zu machen, die Isometrische Perspektive zu benutzen.
Der Benutzer muss sich weder mit der Umrechnungen in die verschiedenen Koordinatensysteme noch um Tiefensortierung seiner Objekte kümmern usw. .
Die Syntax ist an Blitz3D und seinem Entity-System angelehnt und jede Funktion hat ein vorangestelltes "s" für Simple
SimpleIso arbeitet intern OOP, dem Benutzer jedoch, werden ausschließlich einfach zu benutzende Funktionen zur verfügung gestellt.
Im folgenden mal eine Auflistung, was der Benutzer derzeit alles mit SimpleIso tun kann:
Map erstellen
Map verschieben
Objekte erstellen, welche der Tiefensortierung unterliegen (selbige übernimmt SimpleIso)
Objekte bewegen
Gitter ein-/ausblenden
Achsen ein-/ausblenden
Und hier eine Liste der zur Zeit zur verfügung stehenden Funktionen:
Map und Iso Funktionen
Erstellen einer Map
sCreateMap(x:float, y:float, width:Int, height:Int, image:TImage)
Die Map verschieben
sMoveMap(x:float, y:float)
"Gitter" ein-/ausschalten
sGrid:Byte(val:Byte = -1)
Die mit der Maus "gepickten" Tile-Koordinaten
sPickedX:Int() und sPickedY:Int()
Liefert die Materialnummer eines Tiles zurück, wenn "mat = 0", andernfalls setzt es die Materialnummer
sMaterial:Int(tileX:Int, tileY:Int, layer:Int, mat:Int = 0)
Liefert die X- und Y - Koordinaten der Map zurück
sMapX:Float() und sMapY:Float()
Liefert die Mapbreite und -höhe zurück
sMapW:Int() und sMapH:int()
Entity Funktionen
Erstellen eines Objekts, welches in die Isometrie involviert ist
sCreateEntity:sTEntity(tileX:Int, tileY:Int, image:TImage)
Bewegen des Entitys nach den Regeln des "normalen" Koordinatensystems
sMoveEntity(entity:sTEntity, x:float, y:float)
Bewegen des Entitys nach den Regeln des Iso - Koordinatensystems (Siehe Achsen im Bild unten)
Direction:String kann folgendes enthalten: "Up", "Right", "Down", "Left" .
sMoveEntityIso(entity:sTEntity, direction:String, speed:Float)
Entity auf ein Tile positionieren
sPositionEntity(entity:sTEntity, tileX:Int, tileY:Int)
Ein Entity löschen
sDeleteEntity(entity:sTEntity)
Jedem Entity kann eine spezielle Typennumer zugewiesen werden. Zb. für unterscheidungen unter Objektgruppen. Wenn typ = Null wird der Typ zurückgegeben, andernfalls gesetzt
sEntityType:Byte(entity:sTEntity, typ:Byte = Null)
Gibt die "realen" Pixelkoordinaten des Entitys zurück
sEntityX:Float(entity:sTEntity) und sEntityY:Float(entity:sTEntity)
Gibt die Tilekoordinaten zurück, auf dem diese Entity steht
sEntityTX:Int(entity:sTEntity) und sEntityTY:Int(entity:sTEntity)
Legt fest, ob ein Entity vom Renderprozess ausgeschlossen werden soll. Wenn upd = Null dann wird diese Information zurückgegeben, andernfalls gesetzt
sEntityUpdate:Byte(entity:sTEntity, upd:Byte = Null)
Gibt den Entitytype von dem Entity zurück, welches sich auf den angebenen Tile-Koordinaten befindet, falls vorhanden
sEntityTypeOnTile:Byte(tx:Int, ty:Int)
Gibt das Entity zurück welches sich auf den angebenen Tile-Koordinaten befindet, falls vorhanden
sEntityOnTile:sTEntity(tx:Int, ty:Int)
Gibt das mit der Maus "gepickte" Entity zurück
sPickedEntity:sTEntity()
Gibt den Typ des mit der Maus gepickten Entitys zurück
sPickedEntityType:Byte()
Allgemeine Funktionen
Initialisiert SimpleIso. Diese Funktion muss ganz zu Anfang aufgerufen werden
sInitSimpleIso(gW:Int, gH:Int, tW:Int, tH:Int, tGh:Int, gd:Int = 0, ghz:Int = 60, gF:Int = 0)
Zentriert die Kamera auf das übergebene Entity
sCenterView(entity:sTEntity)
Stellt die größe des sichtbereichs ein, alles ausserhalb wird weder gezeichnet noch berechnet
sViewPort(vp:Int)
Updaten der "IsoWelt"
sUpdateWorld()
Rendern der "IsoWelt"
sRenderWorld()
Was ist noch geplant?
Animierte Tiles
Animierte Entitys
Tilebasiertes Kollisionssystem
Speichern und Laden der Welt in/aus einer Datei
Ein beiliegender Mapeditor
Was ist eventuell geplant?
Licht und Schatten-System ( á Createlight )
Pathfinding
Hier ein kleines YouTube-Video dazu:
Tiefensortierung:
http://www.youtube.com/watch?v...e=youtu.be
Animierte Objekte und Pathfinding:
https://www.youtube.com/watch?...e&hd=1
SimpleIso wird eine Iso-Engine für BMax für "jederman".
SimpleIso wird als Modul vorliegen, welches dann nur importiert werden muss.
Der momentane Stand von SimpleIso ist "benutzbar", allerdings fehlt noch einiges an "SchnickSchnack" um es dem Benutzer "NOCH" einfacher zu machen, die Isometrische Perspektive zu benutzen.
Der Benutzer muss sich weder mit der Umrechnungen in die verschiedenen Koordinatensysteme noch um Tiefensortierung seiner Objekte kümmern usw. .
Die Syntax ist an Blitz3D und seinem Entity-System angelehnt und jede Funktion hat ein vorangestelltes "s" für Simple

SimpleIso arbeitet intern OOP, dem Benutzer jedoch, werden ausschließlich einfach zu benutzende Funktionen zur verfügung gestellt.
Im folgenden mal eine Auflistung, was der Benutzer derzeit alles mit SimpleIso tun kann:






Und hier eine Liste der zur Zeit zur verfügung stehenden Funktionen:
Map und Iso Funktionen
Erstellen einer Map

Die Map verschieben

"Gitter" ein-/ausschalten

Die mit der Maus "gepickten" Tile-Koordinaten

Liefert die Materialnummer eines Tiles zurück, wenn "mat = 0", andernfalls setzt es die Materialnummer

Liefert die X- und Y - Koordinaten der Map zurück

Liefert die Mapbreite und -höhe zurück

Entity Funktionen
Erstellen eines Objekts, welches in die Isometrie involviert ist

Bewegen des Entitys nach den Regeln des "normalen" Koordinatensystems

Bewegen des Entitys nach den Regeln des Iso - Koordinatensystems (Siehe Achsen im Bild unten)
Direction:String kann folgendes enthalten: "Up", "Right", "Down", "Left" .

Entity auf ein Tile positionieren

Ein Entity löschen

Jedem Entity kann eine spezielle Typennumer zugewiesen werden. Zb. für unterscheidungen unter Objektgruppen. Wenn typ = Null wird der Typ zurückgegeben, andernfalls gesetzt

Gibt die "realen" Pixelkoordinaten des Entitys zurück

Gibt die Tilekoordinaten zurück, auf dem diese Entity steht

Legt fest, ob ein Entity vom Renderprozess ausgeschlossen werden soll. Wenn upd = Null dann wird diese Information zurückgegeben, andernfalls gesetzt

Gibt den Entitytype von dem Entity zurück, welches sich auf den angebenen Tile-Koordinaten befindet, falls vorhanden

Gibt das Entity zurück welches sich auf den angebenen Tile-Koordinaten befindet, falls vorhanden

Gibt das mit der Maus "gepickte" Entity zurück

Gibt den Typ des mit der Maus gepickten Entitys zurück

Allgemeine Funktionen
Initialisiert SimpleIso. Diese Funktion muss ganz zu Anfang aufgerufen werden

Zentriert die Kamera auf das übergebene Entity

Stellt die größe des sichtbereichs ein, alles ausserhalb wird weder gezeichnet noch berechnet

Updaten der "IsoWelt"

Rendern der "IsoWelt"

Was ist noch geplant?





Was ist eventuell geplant?


Hier ein kleines YouTube-Video dazu:
Tiefensortierung:
http://www.youtube.com/watch?v...e=youtu.be
Animierte Objekte und Pathfinding:
https://www.youtube.com/watch?...e&hd=1