Archiv der Kategorie Allgemein

Monatszusammenfassung September

Beinahe hätte ich es vergessen: Ich muss ja noch meine monatliche Zusammenfassung schreiben!
Also, wie der eine oder andere vielleicht gemerkt hat, ist die Eagle Eye Studios Webpräsenz (http://www.eagle-eye-studios.net/) wieder online. Und wem es noch nicht aufgefallen ist, diesmal war ich zu faul mich mit dieser komischen Sprache namens PHP rumzuschlagen und vertraue auf ein relativ populäres CMS. Wer noch Verbesserungen an der Seite findet, der möge mir diese in einem Kommentar oder per Mail mitteilen!

Nächster Punkt: Content Compiler 3. Geht soweit gut voran, die Vorschau für die Medien fehlt noch und ein bisschen “Random Behavior” muss auch noch ausgebessert werden (auch wenn ich noch nicht weiß wie?!). Ich habe nämlich das Problem, dass das Speichern eines Projektes mit 5 Dateien auf meinem Desktop PC (4×3,2 Ghz Quadcore, 4GB Ram, 500GB HD) etwa fünf! Minuten dauert, auf meinem Notebook (2×2,0 Ghz, 4GB Ram, 320 GB HD) dagegen nur 5 Sekunden! Ich habe dafür keine Erklärung, ich kann nur sagen, dass das Problem irgendwo in der DotNetZip-Library liegt, denn wenn ich das komprimieren in eine Zip Datei weglasse (also die gesamte Ordnerstruktur nichtin eine Datei zusammenfasse) dauert es auch nur in etwa 3 Sekunden. Und das ganze ist schon Multithreaded…

Und der letzte Punkt gilt meinem geheimen Spieleprojekt. Das geht auch ganz gut voran, nur macht Box2D im Moment ein paar Problemchen (Exceptions fliegen mir um die Ohren). Hat zufällig damit jemand schon mal Erfahrungen gesammelt und kann mich von meinem Leiden erlösen? Und ach ja: Da ich ja jetzt eine XBox360 Slim samt 12 Monate CC Trial besitze, wird das Spiel natürlich auch für die XBox gebaut. Lasst euch überraschen!

Monatszusammenfassung August

Hm, nunja diesen Monat gibt es eigentlich nicht viel zu berichten, das meiste wurde von Urlaub und Klassenfahrt geprägt und somit nahezu null Programmieren. Aber ich habe so nebenbei ein neues (kleines) Projekt angefangen. Vorerst werde ich mich dazu in Schweigen hüllen, da ich nicht weiß, ob das Projekt überhaupt Zukunft hat. Also, Informationen gibts erst zum Release (wenn’s denn klappt). Ansonsten habe ich natürlich brav an der neuen EES-Webseite gebastelt und das Backend nimmt allmählich Formen an.
Achso und dank noutline ist jetzt auch meine Pinnwand wieder etwas leerer :) Wenn man in noutline doch nur mehrere Zettelchen erstellen könnte…
Aber gut, man soll sich ja auch mal mit dem zufrieden geben, was man bekommt. So werde ich mich dann mal wieder an meine Arbeit machen und entschuldige mich hiermit dafür, dass ich nicht weiß worüber ich sonst noch so schreiben sollte.

Monatszusammenfassung

Hallo lieber Leser/ liebe Leserin!
Ich habe soeben beschlossen, jeden Monat eine kleine Zusammenfassung über meine Projekte und ihren Status zu schreiben. Also fange ich mal damit am Ende diesen Monats an:
Punk numero eins:
Wie ich vielleicht schon vorher erwähnt hatte (Hab ich das? Hab ich das nicht? Ich weiß es nicht mehr.), ist meine Motivation am Projekt Duckshoot = null. Das liegt vor allem daran, dass es mir einfach keinen Spaß macht, einen Game Editor zu schreiben. Klar, jetzt wird der geneigte Leser wahrscheinlich denken: Jetzt heult der alte Sack hier rum, dabei gibt es doch genug Editoren im Netz. Klar gibt es das! Aber die sind meistens entweder unfertig, total kompliziert oder zu Engine gebunden. Bei der Northwindengine, welche ich für Duckshoot verwende gibt es einen Editor. Aber hat sich den mal jemand angeschaut? Von dem Funktionsumfang ist er vollkommen okay, ein bisschen hier schrauben, ein bisschen dort schrauben. Aber hat sich mal jemand die GUI angesehen? Absolut scheußlich! Von einem Editor erwarte ich eine vernünftige GUI, wo man sich gut zurechtfindet und die funktioniert. Außerdem mag ich diese selbstgezeichneten GUI Elemente absolut nicht. Zu einem vernünftigen Editor gehört für mich eine Windows Forms oder auch WPF GUI. Sogar mit einer Neoforce Oberfläche wäre ich noch zufrieden, aber bitte keine selbstgezeichnete Oberfläche, die nicht nur unprofessionell aussieht, sondern dazu auch noch ein wunderbares lila-farbenes Flackern an den Tag legt! Da hätte sich der Programmierer ruhig mehr Zeit für die Features nehmen können, denn die sind, soweit ich es über die GUI erforschen konnte, nämlich wirklich gut (z.B zufällige Platzierung einer Anzahl von Objekten wie Bäumen o.ä). Und ansonsten habe ich noch keinen 3D-Szeneeditor gefunden, der ein einfach zu integrierendes Format verwendet. Aber falls jemand einen solchen Editor kennt, lasse ich mich gerne überzeugen, über Vorschläge wäre ich also sehr dankbar.
Dann geht’s weiter zum nächsten Punkt auf meiner Liste: dem neuen Content Compiler 3. Hier bin ich im Moment dabei, schönes Multithreading einzubauen, das hab ich auch soweit fertig, allerdings bin ich mit meiner Fortschrittsanzeige noch nicht zufrieden. Die Grundfunktionalität, das Contentkompilieren, funktioniert aber schon schnell & zufriedenstellend. Als nachsten Meilenstein werde ich mich erstmal an das Speichern und Laden von Projekten machen.
Weiter zu Punkt drei: Die EES-Website.
Ich habe mich dazu entschlossen meine gesamte Entwicklungsarbeit erstmal hierdrauf zu lenken, denn ich bin mit der alten Seite einfach nicht mehr zufrieden. Komplett war sie sowieso nie, da ich während der Backend-Programmierung die Lust an der Site verlor. Der Hauptgrund dafür ist, der über die Monate zusammengeflickte, unorganisierte Code. Flexibel war das System auch nie wirklich, was wohl auch mit an meiner Faulheit lag :) Jetzt werde ich jedenfalls mich bemühen eine schöne, flexible neue Seite zu gestalten bzw. zu programmieren. Denn ich werde auch weiterhin auf PHP im Serverbereich setzen. Dem einen mag es vielleicht schon aufgefallen sein, die Seite ist bereits offline! Ja, ich möchte das Thema EES-Site auch möglichst schnell wieder vom Tisch haben und mich wieder meinen anderen Projekten zuwenden. Und ich hoffe zutiefst, dass mir das auch einigermaßen gelingt.

So, das war dann die erste Monatszusammenfassung. Ich glaube das war der bisher längste meiner Artikel. Liegt das vielleicht daran, dass ich so faul bin?

Ach ja, nochmal zur Erinnerung: Kennt jemand einen schönen/guten Editor, welcher die Szenen gut abspeichert, sodass man diese einfach in seine Engine integrieren/laden kann?

Tags: , , , , , ,

Statusbericht: Content Compiler 3

Nach einem Monat Artikelstille melde ich mich mal wieder mit einem Statusbericht. Die Funkstille hat natürlich auch ihren Grund, diesmal die ganzen Arbeiten, Tests und so weiter vor den Zeugnissen. Aber der Stress ist jetzt vorbei (heute Zeugniskonferenzen ._.) und somit bleibt auch wieder ein wenig Zeit fürs Proggen, vorrausgesetzt ich hab Lust dazu.
Naja zur Zeit sieht der Content Compiler 3 schon recht gut aus, wenn auch noch der größte Teil der Programmlogik fehlt, denn man kann gerade mal ein altes Projekt upgraden. Aber dafür macht er optisch schon einiges her :D

Content Compiler Statusbericht

Content Compiler Statusbericht Foto


Dazu muss ich sagen, dass sich gerade im Design eine Komponente die ich benutze, das AvalonDock, um ein vielfaches verbessert hat. So werden jetzt zum Bleistift verschiedene Themes angeboten, wo früher nur die Möglichkeit bestand, die Farbe zu ändern.
Da der neue Content Compiler ja auch Build-Parameter unterstützt und es somit natürlich spezielle Attribute gibt, brauchte es natürlich eine Toolbox. Und schon hat sich der Einbau von einer Docking-Komponente schon gelohnt. Das die komplette GUI in WPF geschrieben ist, brauche ich ja nicht zu erwähnen, oder? ;)
Hiermit verbleibe ich bis zum nächsten Update,
Euer
Flo

Dictionaries serialisieren in .NET

Während meiner Arbeit an dem Content Compiler 3 (Beschreibung siehe letzter Artikel), bin ich auf das Problem gestoßen, dass das .NET Dictionary nicht mittels XML serialisierbar ist. Kein Problem, schmeiß ich mal Google an, um zu wissen warum. Und siehe da: Das Dictionary wird, aus welchem Grund auch immer, nicht von IXmlSerializable abgeleitet. Also weiter gesucht und mehrere Ansätze gefunden. Den meines Erachtens besten Ansatz möchte ich hier mal vorstellen.

Und zwar holen wir das Ableiten von IXmlSerializable einfach nach. Dazu bauen wir uns unser eigenes Dictionary, welches wir dann von IXmlSerializable ableiten. Dazu müssen wir dann auch noch die von IXmlSerializable erforderten Methoden implementieren:


#region Usings
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
#endregion

[XmlRoot("Dictionary")]
public class SerializableDictionary : Dictionary, IXmlSerializable
{
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}

public void ReadXml(System.Xml.XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

bool wasEmpty = reader.IsEmptyElement;
reader.Read();

if (wasEmpty)
return;

while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
reader.ReadStartElement("item");

reader.ReadStartElement("key");
TKey key = (TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();

reader.ReadStartElement("value");
TValue value = (TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();

this.Add(key, value);

reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}

public void WriteXml(System.Xml.XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
foreach (TKey key in this.Keys)
{
writer.WriteStartElement("item");

writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();

writer.WriteStartElement("value");
TValue value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();

writer.WriteEndElement();
}
}
#endregion
}

Damit haben wir dann den IXmlSerializable Member implementiert und wir können nun fröhlich unser Dictionary serialisieren. Wer noch Fragen hat, ab in die Kommentare damit ;)

(Code wurde in abgeändertert Form von Paul Welter’s Blog übernommen)

Tags: , , , , , ,

Ein neuer Bildschirm und ein neuer Content Compiler

Endlich habe ich ihn: Meinen zweiten Bildschirm. Jetzt kann ich mich richtig als “professioneller” Entwickler fühlen! :D Mein neues Schätzchen heißt W2261VP und wurde von LG hergestellt. Es hat weiterhin eine Auflösung von 1920×1080 Pixeln (also eine 16:9 Kiste) und hat somit FullHD :) Vielleicht poste ich auch noch ein Bildchen, vorausgesetzt die SD-Karte von meiner Kamera funktioniert wieder…

UPDATE: So , SD Karte formatiert, geht wieder. Und hier das Bildchen von meinem Desktop:

Naja nach dem bisschen Angeberei kommen wir zum zweiten Punkt an der Tagesordnung, der da heißt: Content Compiler 3.
Also, wie bei jedem großen Update des Funktionsumfangs, gibt es auch diesmal gleich wieder eine völlig neu geschriebene Content Compiler Version. Zum neuen Funktionsumfang gehören sowohl Spritefont-Unterstützung als auch die Unterstützung von Compiler Parametern und Eigenen Importern und Prozessoren. Diese können bequem in den Optionen hinzugefügt oder entfernt werden. Genauso gibt es ein neues Projektformat, welches im komprimierten Zustand gespeichert wird und so weniger Platz verbraucht, als auch die Übersicht besser ist. Alte Projekte können problemlos über den Upgradeassistenten auf die neue Projektversion gebracht werden ohne das gesamte Projekt neu zu erstellen. Und das Beste zum Schluss: Die Benutzeroberfläche ist mal wieder neu designt worden! Ein Ribbon im Office2010 Stil und andockbare Fenster sind jetzt enthalten. Im Moment ist der Compiler noch kurz vor dem CTP Status, aber ich rechne mit einem eventuellen Betarelease Mitte nächsten Monats.

Das wars dann erstmal wieder, ich hoffe bis zum Update dauert es nicht allzu lang.

Es grüßt seine lieben Follower und Blogreader

Flo

Statusbericht: Duckshoot

Ja ich weiß es ist schon länger her seit ich mal wieder ein Update zu Duckshoot rausgegeben hab, aber wer immer schön meinen Twitter mitliest hat ja schon das ein oder andere mitgekriegt. Also verwenden tue ich jetzt die NorthwindEngine, da es so ziemlich die einzige einfache und voralledem fortgeschrittendste ist. Naja jedenfalls sagt mir der Editor der mitgeliefert wird nicht wirklich zu, ziemliche Augenkrebs-Gefahr! So hab ich eben angefangen meinen eigenen Editor zu basteln. Und da dies ja hier Statusupdate heisst poste ich mal ein Bildchen:

Mein knuffiger Editor *g*

mfG

Flo

Settingsdateien in Visual C#

In letzter Zeit habe ich mal drauf geachtet wie C#-Programmierer ihre Einstellungen für Anwendungen speichern. Dabei ist mir aufgefallen, dass Anfänger in C# häufig in stinknormalen Textdateien abspeichern und diese mit neuer Endung versehen. Oder eine (möchtegern)XML Datei verwenden, die total das Schema verfehlt. Alles unprofessionell ;) Man sollte zumindest den XML-Serializer verwenden oder gleich noch besser die Möglichkeit von VisualStudio bzw. Visual C# Einstellungsdateien(.settings) zu verwenden. Diese werden dann je nach Einstellungen sofort oder beim Build serialisiert und für Anwendungseinstellungen z.B. als app.conf im Bin Ordner abgespeichert. Das macht dem faulen Informatiker noch weniger Arbeit :) Man kann sogar eigene Datentypen auswählen. Einzige Beschränkung ist dass diese in einer seperaten Assembly stecken müssen, aber das ist meistens ja kein Problem, oder?

Jetzt mag sich manch einer Fragen: “Schön und gut jetzt hab ich die Settingsdatei. Und wie greif ich drauf zu?”

Demonstrieren wir das mal an einem Beispielprojekt: Als erstes Erstellen wir ein neues WinForms Projekt. Und wie wir sehen, tadaa, die Einstellungsdatei ist gleich da im Properties-Ordner:

Wenn wir jetzt einen Doppelklick dadrauf machen, können wir unsere Einstellungen eintragen. Dabei gilt folgendes:

  1. Links den Namen für die Einstellung eintragen wie z.B. “TestSetting” oder so
  2. Datentyp des Inhalts auswählen, beliebige andere können über ‘Durchsuchen’ ausgewählt werden.
  3. Wählen ob die Einstellungen für die gesamte Anwendung gelten oder nur für den aktuellen Benutzer.
  4. Wert eintragen.

Fertig ist die Einstellungsdatei.

Jetzt können wir über folgenden Aufruf auf unsere Einstellungen zugreifen:

Properties.Settings.Default.TestSetting

Wobei TestSetting natürlich durch den Namen der Einstellung zu ersetzen ist.
Bauen wir uns jetzt ein Formular mit einem Button und einem Label und weisen dem Text des Labels unsere “TestSetting” zu und lassen den Button nur anzeigen wenn IsCool “wahr” ist, dann sieht das ganze so aus:

Das sind natürlich nur die Basics von Settings Dateien. Da lassen sich noch viele andere tolle Dinge mit anstellen aber dazu vielleicht ein anderes Mal mehr ;)

Bis dann

Flo

Content Compiler Build Framework released

Moinsen,

Das CCompiler Build Framework ist hochgeladen.

Nach mehreren Anfragen hab ich mich doch dazu durchgerungen das Build Framework schon hochzuladen, wobei ich das doch erst mit dem GUI zusammen machen wollte :(

Nun denn, ein ausreichend kommentiertes (eigtl fast schon verspammtes) Sample ist auch dabei.

Ihr findet es unter Personal Progs

Happy Building,

Flo

Content Pipeline und MS Build

Hallo ich bins mal wieder ;)

Nachdem ich heute das Build Framework für die nächste Version des Content Compiler fertiggestellt hab, muss ich doch mal loswerden, wie einfach das Microsoft Build Framework/Microsoft Build Engine zu benutzen ist :) . Einfach Engine initialisieren, BuildProject erstellen, Items und ihre MetaDaten hinzufügen, Build Target basteln, fertig.

Nun aber zu meinem Content Build “Framework”. Ich hab mir diesmal gedacht, es ein wenig dynamischer zu gestalten gegenüber der jetzigen Compiler Version. Man kann jetzt Plugins benutzen, welche vor und nach dem Build auf die Dateien und Optionen zugreifen können. Dies ermöglicht z.B. ein einfaches Verschieben der Dateien nach dem Build oder die Ausführung eines Spiels, Editors was auch immer. Die Importer und Processor werden über Klassen angesprochen, welche Assemblynamen, Processor/Importer Namen, sowie den Typ der Datei enthalten, sowie die jeweiligen Extensions. So können die entsprechenden Importer/Processor vom Compiler kinderleicht zugeordnet werden und damit ist es endlich auch möglich eigene Importer/Processor zu verwenden.

Das Assoziations-Prinzip der Importer/Processor mit den Dateien ist recht einfach: Die Dateiendung der aktuellen Datei wird ermittelt und mit den in den Importerklassen verglichen. Ist die Endung vorhanden, wird Name des Importers und Medientyp gespeichert. Danach wird anhand des Medientyps der Processor ermittelt. Damit sind dann alle Anforderungen für ein glückliches Erstellen vorhanden :)

Demnächst werd ich dann mal mein Framework hochladen, damit es auch bewundert werden kann. Danach mach ich mich dann gleich ans Zusammenbauen des Compiler GUI.

In diesem Sinne, ein fröhliches Content Bauen :D

mfG

Flo