Orxonox. Framework & Coding. Einleitung in das Framework von Orxonox

Ähnliche Dokumente
Orxonox. Externe Libraries

Framework. Ablauf dieser Einführung:

Das Framework. Was verstehen wir unter einem Framework?

Das Interface-Konzept am Beispiel der Sprache Java

Informatik II Übung 6

Handbuch für die Erweiterbarkeit

Crashkurs C++ Wiederholung

Informationen zur Verwendung von Visual Studio und cmake

11 Vererbung und Klassenhierarchie

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Programmierpraktikum 3D Computer Grafik

Einführung in die Programmiersprache Java II

Programmierung Nachklausurtutorium

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Vererbung und Polymorphie

Objektorientierte Programmierung Studiengang Medieninformatik

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Universität Karlsruhe (TH)

AK Medientechnologien Hello World. Josef Kolbitsch

Dezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread

Einführung in Truevision3D

Präsentation Interfaces

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Build Management Tool?

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots. falls Zeit: Scheduling 8.11.

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Vorkurs Informatik WiSe 15/16

Informatik I (D-MAVT)

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Thomas Sillmann. Swift im Detail HANSER

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Abend 7 Vererbung und Polymorphie, Abstrakte Klassen

A practical guide to C++

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Build Management Tool?

Syntax. int a; public A() {...} public void F() {...} }

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Wiederholung. Klassenhierarchie:

Coding Conventions. for C++ Reto Carrara Gyrenstrasse 17 CH-8967 Widen +4179/

Inhaltsverzeichnis 1 Einführung Die Software JGIS Grundlagen raumbezogener Daten

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

II.4.5 Generische Datentypen - 1 -

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Vererbung und Polymorphie

Eclipse in der Java-Entwicklung

Einführung in die Programmierung

Einführung in die Programmierung Wintersemester 2016/17

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Einführung in die Programmierung

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Erste Java-Programme (Java Wiederholung & Vererbung)

Build Management Tool

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Einführung in die Programmierung I. 11. Vererbung. Stefan Zimmer

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Fragen zur OOP in Java

1 - EIN NEUES GAMEGRID ANLEGEN

Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

JavaScript clientseitige Programmiersprache zur Dynamisierung von Internetseiten

Inhaltsverzeichnis. 2.2 Grundlagen der UML Zusammenfassung... 53

Hydroinformatik I: Klassen

IT I: Heute. Nachbetrachtung Wissensüberprüfung. Einführung Vererbung. Roboter in becker.robots. Filialenbelieferung 4.11.

Überblick. Überblick zum weiteren Inhalt

Programmierpraktikum 3D Computer Grafik

Universität Hamburg, Fachbereich Informatik Übungsblatt 11 zum Praktikum. E. Betke, N. Hübbe, M. Kuhn, J. Lüttgau, J. Squar im WiSe 2018/2019

Einführung OWB Java API

Wie teuer ist dynamischer Polymorphismus? 194

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Der MyCoRe-URI-Resolver

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

1 Einleitung Generizität Syntax... 2

Software Engineering II

Javakurs für Anfänger

Vererbung. Definition Felder Konstruktor Methoden Beispiel. Dr. Beatrice Amrhein

Einführung in die Programmierung

Multimedia im Netz Wintersemester 2012/13

Factory Patterns und deren Auswirkung auf die Softwarearchitektur in der Praxis

WESTFÄLISCHE WILHELMS-UNIVERSITÄT MÜNSTER. Advanced Matlab. living knowledge WWU Münster. Mario Ohlberger, Martin Drohmann, Stefan Girke 10/05/2012

Hello World! Eine Einführung in das Programmieren Das erste Programm

3 Dateien 5. 4 Aufgaben 5. 5 Ausblick 6. Wir wenden uns der Implementierung von Datenstrukturen mittels objekt-orientierter Programmierung

Mit dem Google-Web-Toolkit moderne Web-Anwendungen entwickeln

Transkript:

Framework & Coding Einleitung in das Framework von

Libraries OGRE (Grafikengine)

Libraries OGRE (Grafikengine)

Libraries OGRE (Grafikengine)

Libraries CEGui (GUI-Engine)

Libraries Bullet (Physikengine)

Klassenhierarchie - Class alle Klassen und Interfaces erben von Class notwendig für das Funktionieren des Frameworks -> Servicefunktionalität

Klassenhierarchie - Baseobject Basisklasse aller Objects in Objects: Können in ein Level geladen werden. Werden am Ende des Levels wieder gelöscht.

Objekteigenschaften - Raum jedes Objekt, dass im Level einen Ort hat, erbt von der Basisklasse Worldentity. jedes Objekt, das man sehen kann Worldentity: Punkt und Vektor im Raum Worldentities: Statisch: StaticEntity (z.b. eine Spacestation) Beweglich: MovableEntity (z.b. ein Projektil) Kontrolliert: ControllableEntity (z.b. ein Spaceship)

Worldentities: Definition Worldentities können aneinander attached werden, d.h. man kann kann sie zusammenhängen. Die Position des angehängten Objekts (Child) ist dann relativ zur Position und Rotation des Basisobjekts (Parent).

Worldentities: Attachen Absolute Position im Raum (Parent): Parent

Worldentities: Attachen Relative Position im Raum (Child): Child Parent

Worldentities: Attachen Rotation des Child: Child Parent

Worldentities: Attachen Rotation des Parent: Child Parent

Objekteigenschaften - Zeit ein Objekt ändert sich in der Zeit -> es muss vom Interface Tickable erben. Klassen die von Tickable erben, erben die Funktion tick(float dt). ein Frame wird gerendert -> tick(dt) wird aufgerufen dt: die Zeit seit dem letzten Aufruf von tick(dt)

Objektmodellierung is a Relation: ein Spaceship ist ein Worldentity Mechanismus: Vererbung has a Relation: ein Spaceship hat Waffen, einen Antrieb,... Mechanismus: Pointer auf ein anderes Objekt

Verzeichnisstruktur - Trunk cmake: CMake Scripts data: XML und Lua Scripts src: Quellcode

CMake Findet die benötigten Libraries Erstellt ein Makefile Kann IDE-Projekt-Dateien erstellen

Struktur src Externe Libraries Interne Libraries Modules

Verzeichnisstruktur - Build bin: Executables config: Config-Files log: Output run: Startet (runscript)

Beispielklasse: CMakeLists.txt Wir erstellen zwei neue Dateien, MyClass.cc (das Source-File) sowie MyClass.h (das Header-File). Im gleichen Ordner in dem wir die Files erstellt haben, suchen wir die Datei CMakeLists.txt und suchen nach einer Liste von anderen Source-Files. Dort Tragen wir MyClass.cc an einer beliebigen Stelle ein. Dadurch wird sichergestellt, dass unser neues File kompiliert wird.

Beispielklasse: Header Im Header-File Deklarieren wir die neue Klasse: class MyClass : public MovableEntity public: MyClass(Context* context); virtual ~MyClass(); ; virtual void tick(float dt); Unsere Klasse erbt also von MovableEntity (eine bewegliche WorldEntity). Da MovableEntity ausserdem vom Interface Tickable erbt, erbt auch unsere Klasse die Tick-Funktion.

Beispielklasse: Source Im Source-File Implementieren wir das Grundgerüst der neuen Klasse: MyClass::MyClass(Context* context) MyClass::~MyClass() void MyClass::tick(float dt)

Beispielklasse: RegisterClass Zuerst müssen wir eine Factory erstellen, damit unsere Klasse vom Framework erkannt und auch über XML geladen werden kann: RegisterClass(MyClass); MyClass::MyClass(Context* context) MyClass::~MyClass() void MyClass::tick(float dt)

Beispielklasse: RegisterObject Als nächstes müssen wir direkt zu Beginn des Constructors unser Objekt registrieren: RegisterClass(MyClass); MyClass::MyClass(Context* context) RegisterObject(MyClass); MyClass::~MyClass() void MyClass::tick(float dt)

Beispielklasse: Context Ausserdem müssen wir den context-pointer an die Basisklasse weitergeben: RegisterClass(MyClass); MyClass::MyClass(Context* context) : MovableEntity(context) RegisterObject(MyClass); MyClass::~MyClass() void MyClass::tick(float dt)

Beispielklasse: SUPER Damit auch weiterhin der Tick von MovableEntity aufgerufen wird, müssen wir den Aufruf der Tick-Funktion an die Basisklasse weiterleiten: RegisterClass(MyClass); MyClass::MyClass(Context* context) : MovableEntity(context) RegisterObject(MyClass); MyClass::~MyClass() void MyClass::tick(float dt) SUPER(MyClass, tick, dt);

Beispielklasse: orxout() Schlussendlich wollen wir noch etwas (sinnlose) Action in die Klasse bringen, daher geben wir in jedem Tick einen Text in die Konsole aus: RegisterClass(MyClass); MyClass::MyClass(Context* context) : MovableEntity(context) RegisterObject(MyClass); MyClass::~MyClass() void MyClass::tick(float dt) SUPER(MyClass, tick, dt); orxout() << Hello World << endl;

XML XML ist eine textbasierte Sprache, um Objekte zu speichern und zu laden. XML weist die selbe Form wie HTML auf. Wir verwenden XML, um Levels und andere Ansammlungen von Klassen (z.b. HUDs) zu beschreiben. Beispiel: <MyClass myvalue= 1 myothervalue= Hello World > <subclasses> <OtherClass somevalue= 1.111 /> <OtherClass somevalue= 2.222 /> </subclasses> </MyClass>

XMLPort XMLPort ist unser Interface zwischen XML und C++. In XMLPort wird definiert, welche Objekte und Attribute in XML beschrieben werden können. Ausserdem werden Funktionen definiert, um diese Attribute lesen und schreiben zu können. Für jeden Wert braucht es ein Paar von set- und get- Funktionen. Die set-funktion setzt den Wert im Objekt, die get- Funktion liest ihn aus. Beispiel: void MyClass::XMLPort(...) SUPER(MyClass, XMLPort,...); XMLPortParam(MyClass, "myvalue", setvalue, getvalue, xmlelement, mode); XMLPortParam(MyClass, "myothervaluevalue", setothervalue, get... XMLPortObject(MyClass, OtherClass, "subclasses", addsubclass, getsubclass, xmlelement, mode);