Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Scripting Gems 7 Von Marcel Schotten Kurs: Softwaretechnologie II SS2013 Dozent: Prof. Dr. Thaller.

Ähnliche Präsentationen


Präsentation zum Thema: "Scripting Gems 7 Von Marcel Schotten Kurs: Softwaretechnologie II SS2013 Dozent: Prof. Dr. Thaller."—  Präsentation transkript:

1 Scripting Gems 7 Von Marcel Schotten Kurs: Softwaretechnologie II SS2013 Dozent: Prof. Dr. Thaller

2 Dataports!

3 - die steigende Komplexität in Computerspielen und deren Entwicklung, sorgt dafür das der Entwickler zwei Möglichkeiten hat, diese zu bewältigen: 1. Er investiert mehr Zeit und Arbeit 2. Er entwickelt ein besseres System um damit umzugehen. - wenn wir uns nun für zweiteres Entscheiden müssen wir wissen, das Code Module mit einander kommunizieren, in dem sie Daten zwischen ihnen versenden. - diese Datei muss jetzt in ein Format umgewandelt werde, welches jedes Modul versteht und was zeitgleich, speicherschonend und ressourcen-freundlich ist.

4 Dataports ist ein Weg zum verwalten von Komplexität, durch eine Reduzierung der Compiler-Zeit Abhängigkeit und macht das Laufzeitverhalten flexibler.

5 Konzept: - Dataports sind relativ einfach - es ist ein Teil der Datei, die eine globale ID beherrbergt. - Diese Datei kann eine Struktur, eine Classe oder einfach ein C++-Datentyp sein. - Bei der Erstellung registrieren die Dataports ihre ID mit einer Verwaltungsklasse.

6 1. Dataport: Void Register( std:: string ID ); Void deRegister( void ); 2. Dataport Pointer: -traditioneller Pointer, unterschieden zwischen einem Dataport Manager und der statischen Definition im Code. 2 Methoden: Dataport * Attach( std::string ); // fragt nach dem angeforderten Dataport Pdataport = pDataportMgr->Attach( "Dataport ID" ) Detach(); // Hebt die Verbindung zwischen Pointer und Dataport auf. 3. Dataport Manager: - versteckt im Hintergrund des Dataport-Systems. - es ist ein Storage- and retrieval system der alle registrierten Dataports beinhaltet.

7 Type Safety&Reference Counting: - Type Safety: über eine Template Funktion (GetID ) bekommen wir eine 32-Bit nummer zurück, die unsere Klasse identifiziert, so ist gewährleistet, das Pointer und Dataport nicht unterschiedlicher Typen angehören. -Reference Counting: um das Problem von invaliden Pointern vorzubeugen, benutzen Dataports eine Art Zählsystem. Über das Template m_refCount. -> Wenn ein Dataport registriert ist, wird der Zähler auf 0 gesetzt. ->Wenn der Dataport Pointer an einen Dataport gekoppelt wird, dann wird der Zähler um eins inkrementiert. ->Wenn ein Pointer, von einem Dataport entkoppelt wird, wird der Zähler ums eins demekrementiert. -> Wenn ein Dataport wieder deregistriert wird, wird der Reference Count gecheckt. Wenn er nicht Null beträgt, wird ein Fehler ausgeworfen.

8 Probleme: - zuviele Hashes führen zu einer unweigerlichen Kollision mit einander. - sie sind härter zu debuggen. - eine hohe Nutzung der Dataports führt zu einer erhöhten Performanz.

9 Dance with Python's AST

10 In jedem MMORPG sind eine Vielzahl von Konversationen zwischen NPC und Spielern. Diese benötigen Prozessorzeit zum entschlüsseln und eine hohe Bandweite um sie zu transferieren. Phyton ist eine dynamische objekt-orientierte Programmier- Sprache, die weit verbreitet ist, in der MMORPG Entwicklung. Mit dem Compiler kann man den Abstract Syntax Tree (AST) manipulieren und in Echtzeit den generierten Bytecode überprüfen. Diese Methode beschreibt, wie man Strings mit Nummern austauscht, indem man den AST manipuliert. => Bandweite und Prozessorzeit können eingespart werden.

11 Der Begriff Abstrakter Syntaxbaum bzw. Abstract Syntax Tree (AST) bezeichnet eine logische Baumstruktur, welche die inhaltlichen Zusammenhänge eines Dokumentes im Sinne eines Syntaxbaumes wiedergibt.

12 Background: - normale Behandlung von Text in Spielen ist über einen Translation Table. - Jeder String im Spiel ist an eine ID geknüpft und die ID schaut jedes mal in diesen Table, wenn er aufgerufen wird. - Vorteil von ID's liegt an der Bandweite und am Speicher, zudem können sie auf Audio Ausgaben deuten und dazu noch in jede andere Sprache übersetzt werden. - Alle ID's zu tracken, benötigt viel Zeit und Verwaltung während der Entwicklungszeit. - Nutzvoller wäre ein Weg den existierenden Code zu examinieren, um dann alle Strings zu finden, sie in eine Datenbank zu speichern und dort zu tracken.

13 Lösungsansatz: -Python Strings entweder in Single Quotes ' ' oder in double " " CompanyName = 'NetEase.Co' ProjectName = "Tang Dynasty" Adress = " " " GuangZhou, China " " " -Da es jetzt nicht so leicht ist, diese Strings zu extrahieren, bietet Python einen Mechanismus um diesen Job zu vereinfachen: Compile( source, filename, mode, flags=None, dont_inherit=None ) CompileFile( source ) Parse( buf ) ParseFile( path ) Walk( ast, visitor[, verbose] ) Compile/Compilefile: kompilieren den Source Code Parse/ParseFile: geben einen AST für den Python Code aus, der im Buffer liegt. Walk: geht über den AST und gibt eine Methode für den Besucher für jeden Knoten der begegnet wurde, an.

14 Vielen Dank für eure Aufmerksamkeit :)!!!


Herunterladen ppt "Scripting Gems 7 Von Marcel Schotten Kurs: Softwaretechnologie II SS2013 Dozent: Prof. Dr. Thaller."

Ähnliche Präsentationen


Google-Anzeigen