SimpleIso - Isometrie auf "Einfach"

Kommentare anzeigen Worklog abonnieren

Worklogs SimpleIso - Isometrie auf "Einfach"

Tilebasierte Kollision

Freitag, 15. März 2013 von Trust
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.



Performance verbesserung

Mittwoch, 13. März 2013 von Trust
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


Animationen

Montag, 11. März 2013 von Trust
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
Arrow 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
Arrow 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.
Arrow sCreateAnimSeq:sTAnimSeq(startFrame:Int, endFrame:Int, animDelay:Float = Null)

Verändert die Animationsgeschwindigkeit.
Wenn "animDelay gleich "Null" wird stattdessen die Zeit zurückgegeben
Arrow sAnimDelay:Float(anim:sTAnimSeq, animDelay:Float = Null)

Gibt zurück, wie oft eine Animation schon durchlaufen ist
Arrow sAnimTimes:Int(anim:sTAnimSeq)

Stoppt eine laufende Animation
Arrow sAnimStop(anim:sTAnimSeq)

Startet eine gestoppte Animation
Arrow sAnimResume(anim:sTAnimSeq)

Gibt zurück, ob eine Animtion grade läuft oder nicht
Arrow sAnimPlaying:Byte(anim:sTAnimSeq)



Fps Funktionen

Erstellt einen Fps-Zähler
Arrow sCreateFpsTimer()

Aktualiesiert den Fps-Zähler
Arrow sUpdateFps()

Resettet den Fps-Zähler
Arrow sResetFps()

Gibt die Fps auf dem Bilschirm an der Position x und y aus
Arrow sShowFps(x:Float, y:Float)

Liefert die Fps zurück
Arrow sFpsValue:Int()

SimpleIso für BMax

Sonntag, 10. März 2013 von Trust
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 Wink
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:

Arrow Map erstellen
Arrow Map verschieben
Arrow Objekte erstellen, welche der Tiefensortierung unterliegen (selbige übernimmt SimpleIso)
Arrow Objekte bewegen
Arrow Gitter ein-/ausblenden
Arrow Achsen ein-/ausblenden



Und hier eine Liste der zur Zeit zur verfügung stehenden Funktionen:

Map und Iso Funktionen

Erstellen einer Map
Arrow sCreateMap(x:float, y:float, width:Int, height:Int, image:TImage)

Die Map verschieben
Arrow sMoveMap(x:float, y:float)

"Gitter" ein-/ausschalten
Arrow sGrid:Byte(val:Byte = -1)

Die mit der Maus "gepickten" Tile-Koordinaten
Arrow sPickedX:Int() und sPickedY:Int()

Liefert die Materialnummer eines Tiles zurück, wenn "mat = 0", andernfalls setzt es die Materialnummer
Arrow sMaterial:Int(tileX:Int, tileY:Int, layer:Int, mat:Int = 0)

Liefert die X- und Y - Koordinaten der Map zurück
Arrow sMapX:Float() und sMapY:Float()

Liefert die Mapbreite und -höhe zurück
Arrow sMapW:Int() und sMapH:int()


Entity Funktionen

Erstellen eines Objekts, welches in die Isometrie involviert ist
Arrow sCreateEntity:sTEntity(tileX:Int, tileY:Int, image:TImage)

Bewegen des Entitys nach den Regeln des "normalen" Koordinatensystems
Arrow 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" .
Arrow sMoveEntityIso(entity:sTEntity, direction:String, speed:Float)

Entity auf ein Tile positionieren
Arrow sPositionEntity(entity:sTEntity, tileX:Int, tileY:Int)

Ein Entity löschen
Arrow 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
Arrow sEntityType:Byte(entity:sTEntity, typ:Byte = Null)

Gibt die "realen" Pixelkoordinaten des Entitys zurück
Arrow sEntityX:Float(entity:sTEntity) und sEntityY:Float(entity:sTEntity)

Gibt die Tilekoordinaten zurück, auf dem diese Entity steht
Arrow 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
Arrow 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
Arrow sEntityTypeOnTile:Byte(tx:Int, ty:Int)

Gibt das Entity zurück welches sich auf den angebenen Tile-Koordinaten befindet, falls vorhanden
Arrow sEntityOnTile:sTEntity(tx:Int, ty:Int)

Gibt das mit der Maus "gepickte" Entity zurück
Arrow sPickedEntity:sTEntity()

Gibt den Typ des mit der Maus gepickten Entitys zurück
Arrow sPickedEntityType:Byte()


Allgemeine Funktionen

Initialisiert SimpleIso. Diese Funktion muss ganz zu Anfang aufgerufen werden
Arrow 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
Arrow sCenterView(entity:sTEntity)

Stellt die größe des sichtbereichs ein, alles ausserhalb wird weder gezeichnet noch berechnet
Arrow sViewPort(vp:Int)

Updaten der "IsoWelt"
Arrow sUpdateWorld()

Rendern der "IsoWelt"
Arrow sRenderWorld()




Was ist noch geplant?

Arrow Animierte Tiles
Arrow Animierte Entitys
Arrow Tilebasiertes Kollisionssystem
Arrow Speichern und Laden der Welt in/aus einer Datei
Arrow Ein beiliegender Mapeditor



Was ist eventuell geplant?
Arrow Licht und Schatten-System ( á Createlight )
Arrow 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