softwaretechnologie ii (teil 2): simulation und 3d programmierung manfred thaller ss 2013 scripting...
TRANSCRIPT
![Page 1: Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Manfred Thaller SS 2013 Scripting Gems 6 Linda Scholz](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022051819/55204d6549795902118badc2/html5/thumbnails/31.jpg)
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