Upload
rolf-abrams
View
106
Download
0
Embed Size (px)
Citation preview
Softwaretechnologie II (Teil 2):Simulation und 3D ProgrammierungManfred ThallerSS 2013
Scripting Gems 6
Linda Scholz
Scripting Language Survey
Beliebte Tools zur Spieleprogrammierung Steuerung animierter Sequenzen Merkmale der NPC´s Verhalten der AI-kontrollierten Helfer Ermöglicht frühe Prototypen des Spiels Vereinfacht die Teamarbeit
Scripting Language Survey
Python Lua GameMonkey AngelScript
Language Coding
Universal Features Ähnliche Charakteristiken Flexibilität – Möglichkeit den Code während des
laufenden Spiels zu verändern Automatisiertes Memory Management Einfache Bedienung
Language CodingUnterschiede
AngelScript – fixed typed language Variablen werden für ihren Nutzen benötigt
Lua/Pyhton/GameMonkey – dynamic typed language Werte verschiedener Typen können verarbeitet
werden Werte werden bei der Zuweisung erzeugt Lokale und globale Variablen müssen deklariert
werden
Language CodingUnterschiede
Python Größte Auswahl dynamischer Strukturen
Lua / GameMonkey Nutzen Tables, um Container und Objekte zu
implementieren oder Klassen zu simulieren AngelScript
Nutzt dynamische Arrays
Python Daten- und Funktionalitätsaustausch möglich Python-Funktionen können die Werte in C++
erstellen und C++ callbacks registrieren Standard Phyton mit C++ zu verbinden ist
kompliziert und führt oft zu Fehlern AngelScript
Teilt die Abruf-Konventionen mit C++ Es werden keine zusätzlichen Funktionen /
Modifikationen benötigt
Integration with C/C++
Integration with C/C++
Lua Infomationsaustausch zwischen Lua und C++ ist
durch einen virtual stack geregelt Für jede Funktionsabfrage wird ein neuer stack
angelegt GameMonkey
Einfache Integration mit C++ Beschränkte objektorientierte Programmierung –
keine Funktionsüberladungen, Klassen-Vererbung oder Polymorphismus
Integration with C/C++
Kompletter Zugriff auf globale Variablen ist möglich in Lua, AngelScript und GameMonkey
Lua / GameMonkey nutzen globale tables AngelScript nutzt Funktionen um pointer zu
einer globalen Variable abzufragen In Python können globale Konstanten von C++
aufgerufen werden
Integration with C/C++
Durch C++ ist es möglich Script Funktionen abzurufen
Python Alle Parameter müssen zu Python Objekten
konvertiert und in ein tuple gruppiert werden Ein Wert wird zurückgegeben, aber es kann ein
tuple sein, der verschiedene Werte enthält
Integration with C/C++
Lua Parameter werden in einem stack gelagert Mehrere Werte können in einem stack
zurückgegeben werden AngelScript / GameMonkey
Parameter werden zu Helfer-Klassen hinzugefügt und mit dem Namen der Funktion initialisiert
Ein Wert wird der Helfer-Klasse zurückgeliefert
Integration with C/C++
Binding tools werden benötigt, um Klassen zu C++ zu exportieren
AngelScript Einfacher Export durch Aufruf der API
GameMonkey Binding tool ist noch in der Entwicklung
Integration with C/C++
Python – Swig Interface file – beschreibt alle C++ Features Output source files in C++ und Python Generiert Schatten Klassen in Python aus C++
Klassen Vererbungshierarchie und Überladen von
Funktionen ist möglich
Integration with C/C++
Python – Boost.Python C++ Klassen werden mit Python ähnlicher Syntax
geschrieben Konstruktoren mit Parametern werden als
Eigenschaften exportiert, die Python als public data members sieht
Die Boost.Python Bibliothek hilft bei der Integration von Klassen- und Vererbungsstrukturen, Funktionsüberladung und –operatoren, Iteratoren und Objekt Interface von C++ zu Python
Integration with C/C++
Lua – ToLua++ Enthält input header files und outputs die das
Einbinden implementieren Header files können dem input package zugefügt
werden Klassen können einfach exportiert werden Die Klassen können in Lua mit Vererbung und
Polymorphismus genutzt werden Überladene Funktionen und Operatoren werden als
Teil der Klasse unterstützt
Integration with C/C++
Lua – LuaPlus Durch Modifikation kann C++ integriert werden Unterstützt keine cross-language Vererbung oder
Funktionsüberladung C++ Programmierer können Lua vereinfacht
initialisieren, mit dem stack operieren und globale Variablen abrufen (LuaState)
C++ Programmierer können Objekte unabhängig vom stack nutzen (LuaObject)
Performance Features
Memory Management Speicher verteilen, Speicher freigeben, Lücken
schließen Reference Counting
Prüft ob Objekte noch gebraucht werden durch Referenzen zu anderen Objekten
Solange Objekte zu anderen Referenzen haben werden sie nicht freigegeben (Reference Cycles)
Performance Features
Garbage Collection Objekte werden durch Hierarchien festgelegt Root Elemente lagern Referenzen zu anderen
Objekten, die markiert werden Nicht mehr benötigte Objekte werden aus der
Hierarchie gelöscht Unmarkierte Objekte werden entsorgt (mark and
sweep) Garbage Collection Durchläufe brauchen viel Zeit Incremental Garbage Collection führt die Operation
über mehrere Frames aus
Performance Features
Custom Memory Manager Belegt und befreit geschützten Speicher
unabhängig vom System Profiling
Profile(Python): Erlaubt Lagerung von Profildaten über die Ausführung einer laufenden Funktion
LuaProfiler(Lua): Man erhält ein Protokoll über Funktionsaufrufe und verbrauchter Zeit
Development Support Features
Multithreading Durch Klassen wird ein Multithread-System simuliert Generators in Python – nicht komplett thread-safe Coroutines in Lua GameMonkey hat ein umfangreichen thread support
– Ausführungen können geblockt oder angehalten werden bis sie ein Event wieder aktiviert
Development Support Features
Debugging Facilities Wichtiges Tool zur Fehlersuche im Script Python:
Logging package – hilft bei debugging Problemen Pdb module: Unterstützt das Setzen von Breakpoints,
Wechseln zwischen Code & Untersuchen von stack frames
Lua Keine built-in debugging tools Helfer-Funktionen für Informationen über die Laufzeit,
Verhalten von Funktionen und Funktionsaufrufe
Development Support Features
Debugging Facilities GameMonkey:
Funktion um Breakpoints zu setzen und Prüfen ob Bedingungen wahr sind
Zusätzlich können Rückruffunktionen unter bestimmten Bedingungen aufgerufen werden
AngelScript Für jede Ausführung kann eine Rückruffunktion
aufgerufen werden Untersuchen von Variablenwerten wird in Zukunft möglich
sein
Conclusion
Verschiedene Scripting Languages bieten verschiedene Funktionen
Spielentwickler können sich eine passende Sprache aussuchen
Möglichkeit verschiedene Sprachen zu kombinieren und Features zu integrieren steht hierbei im Mittelpunkt
Exposing Actor Propeties Using Nonintrusive Proxies
Actor Objekte in der Spielwelt egal ob statisch oder
dynamisch ActorProxy
Datenorientierte Klasse, die jede Actor-Klasse umhüllt und die Eigenschaften kennt
Enthält allgemeine Tools, die Level-Editor oder Game-Manager aufrufen und manipulieren können
ActorProperty Informationen über einzelne Eigenschaften
Nonintrusive and Dynamic Architecture
ActorProxies werden benötigt um praktische Arbeit zwischen verschiedenen Teammitgliedern zu gewährleisten
Proxies bieten eine nicht berührungsfreie Architektur, die die Funktionen des Grundobjekts nicht verändern
Gefahr existierenden Code zu zerstören ist gebannt
Nonintrusive and Dynamic Architecture
ActorProperty ist dynamisch und beeinflusst nicht die Laufzeit
Man kann Objekte verändern ohne die Basis zu zerstören
ActorProperty
Functors Getter Methode zum Wiederherstellen von Daten Setter Methode zum Zuweisen von Daten Functors (function objects) sind ein C++
Mechanismus um den call-back function pointer zu erreichen
getter und setter Functors müssen in die Basisklasse integriert werden
Unterklassen können so die Typen SetType und GetType definieren
Property Design
GenericActorProperty Klasse dient als Basis und enthält die Metadaten
Unterklassen für jeden Eigenschaftstyp werden benötigt, um die verschieden Typen wie integers, floats, textures oder sounds zu unterstützen
ActorProxies
• Jedes Proxy konstruiert eine Liste der Eigenschaften der Klasse mit jeweiliger getter und setter Methode
• Jedes Proxy hat eine Referenz zum zugrunde liegenden Objekt, wodurch tools direkt das Proxy nutzen können
ActorProxies
• Initialisierte Proxies liefern eine einheitliche Schicht des Objektverhaltens, die universell genutzt werden kann - bspw. zur Objekterzeugung
• Man hat komplette Kontrolle über die Objekteigenschaften
Conclusion
• Teamarbeit ist gewährleistet und verschiedene Teammitglieder mit verschiedenen Aufgaben können Objekte für sich bearbeiten ohne das Grundobjekt zu zerstören
• Zugrundeliegende Objekte können wiederverwendet werden