31
Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

Embed Size (px)

Citation preview

Page 1: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

Softwaretechnologie II (Teil 2):Simulation und 3D ProgrammierungManfred ThallerSS 2013

  

Scripting Gems 6 

Linda Scholz

Page 2: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 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

Page 3: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

Scripting Language Survey

Python Lua GameMonkey AngelScript

Page 4: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 5: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 6: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 7: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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++

Page 8: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 9: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 10: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 11: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 12: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 13: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 14: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 15: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 16: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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)

Page 17: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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)

Page 18: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 19: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 20: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 21: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 22: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 23: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 24: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 25: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 26: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

Nonintrusive and Dynamic Architecture

ActorProperty ist dynamisch und beeinflusst nicht die Laufzeit

Man kann Objekte verändern ohne die Basis zu zerstören

Page 27: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 28: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 29: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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

Page 30: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

ActorProxies

• Initialisierte Proxies liefern eine einheitliche Schicht des Objektverhaltens, die universell genutzt werden kann - bspw. zur Objekterzeugung

• Man hat komplette Kontrolle über die Objekteigenschaften

Page 31: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz

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