[S1.01] Spieleentwicklung mit DeltaEngine Teil 1: Vorbereitungen und erster Code

Hallo liebe Blogleser,

wie bereits angekündigt, geht es los mit der Spieleentwicklung mit DeltaEngine-Reihe.

Allgemein wird das Ziel der Reihe sein, dass wir von Grund auf den Umgang mit Delta lernen und am Ende unser eigenes Spiel haben. Welches dies ist, habe ich noch nicht wirklich entschieden, da ich nichtmal weiß, wie viele Teile ich machen möchte von dieser Serie.

Ziel des heutigen Teiles ist es, alle benötigten Dinge vorzubereiten, die IDE passend einzurichten und auch schon unseren ersten Code. zu schreiben.

Nun aber nicht zu lange geredet, fangen wir doch gleich an:

 

 

Was ist DeltaEngine?

Bei der DeltaEngine (Webseite: www.deltaengine.net) handelt es sich um eine Gameengine, vergleichbar mit der UnrealEngine oder anderen Gameengines.
Zusätzlich bietet Delta noch Schnittstellen für unterschiedliche Graik-/Audio-/Video- und Physikmodule, so kann man z.B. auf OpenTK als Grafik-/Soundmodul setzen und für die Physik dann die Farseer-Engine verwenden.
Dabei nimmt Delta keineweswegs einem alle Arbeit ab, es vereinfacht sie nur, indem schon viele fertige Dinge geboten werden, wie z.B. eine UI-Verwaltung oder andere Dinge. Ebenso wird bei Delta darauf geachtet, dass alles möglichst hoch optimiert abläuft für die beste Performance (soweit möglich).

Derzeit befindet sich DeltaEngine noch im Betastatus, eine Veröffentlichung ist für Ende 2012 geplant. Jeden Monat kommt eine neue, stabile Beta heraus, dazu kann man sich fast täglich den Nightly-Release ziehen und ist somit stets aktuell mit dem Entwicklungsstand.

Ein großes Plus an Delta ist vorallem die große Plattformauswahl. So läuft der gleiche Code auf dem PC, aber auch auf iPod/iPad/iPhone, Android, WindowsPhone 7 oder halt eben Linux bzw. Mac.
Die Entwicklung für den PC ist kostenlos, für alle anderen Plattformen bedarf es einer Multiplattformlizenz, deren Veröffentlichung demnächst stattfinden soll (zusammen mit dem Marktplatz)

Das Team, welches DeltaEngine entwickelt, hat selbst auch schon Spiele mit der eigenen Engine entwickelt und veröffentlicht, u.a auf WP7, iOS und Android. (Nicht jedes Spiel ist auf jeder Plattform verfügbar)
Sucht einfach mal nach ZombieHockey oder SoulCraft, wenn ihr mehr wissen wollt.

 

Alles in allem ist Delta ein gutes Gesamtpaket, mit dem man sich schon heute beschäftigen kann, auch wenn es noch Beta ist.
Wer mehr wissen will, der hat oben den Link zur Homepage Delta, wo es noch mehr Informationen u.a auch zu den Plattformen, die unterstützt werden, gibt.

 

Vorbereitungen:

Ohne Fleiß kein Preis. Leider müssen wir auch hier, wie so bei vielen anderen Dingen auch, erst einige Vorbereitungen treffen, damit wir überhaupt mit DeltaEngine arbeiten können.
Ich möchte hier jetzt aber nicht lange vorreden, sondern gleich loslegen.

 

Benötigte Fähigkeiten/Programme

  • Umgang mit einer Programmiersprache aus der .NET-Familie. Ich setze hier voraus, dass entweder C# oder VisualBasic.NET beherrscht wird. Ich gestalte kein Tutorial für absolute Programmieranfänger, da dies den Rahmen des Tutorials einerseits stark vergrößern bzw. sprengen würde und zudem nichts mit der Thematik zu tun hat, da wir ja immerhin Spiele programmieren wollen.
  • Ein wenig Interesse in der Spieleentwicklung sollte auch vorhanden sein. (Wer den Artikel liest, sollte dies sowieso schon haben, denke ich mal.
  • Nicht unbedingt nötig, aber hilfreich wäre es, wenn zumindest etwas mit einem Grafikprogramm umgegangen werden kann (nicht Paint :D)
    Ich liefere zwar soweit die Grafiken mit, die wir brauchen (sofern es urheberrechtlich funktioniert, was bei von mir erstellten Grafiken sowieso kein Problem sein sollte), aber dennoch wäre es doch besser, wenn man evtl. seine Grafiken noch verbessern könnte 😀
  • Eine IDE: Ich verwende Visual C# 2010 Express (erhältlich hier), es sollte aber auch jede andere IDE funktioneren, z.B. SharpDevelop oder MonoDevelop.
  • Tortoise HG: Dieses Programm brauchen wir, da wir stets mit dem aktuellen Nightly-Release arbeiten, der zum Zeitpunkt der Fertigstellung eines jeden Teils der Serie veröffentlicht wurde. (Aus diesem Grund könnte es sein, dass später frühere Teile der Serie nicht mehr korrekt sind, was den Code angeht, da es zwischenzeitlich Änderungen gegeben haben könnte) Erhältlich ist dieses Programm hier
  • VisualHG: Hierbei handelt es sich um ein Plugin, welches es erlaubt, dass TortoiseHG auch in Visual Studio integriert wird.
    Kann heruntergeladen werden, muss aber nicht, da ich in diesem Tutorial keine Änderungen am Delta Source vornehmen werde. Ist also nur für die, die außerhalb des Tutorials mit Delta arbeiten wollen und dabei Sourceänderungen vornehmen wollen und diese halt eben dann in das öffentliche Repository übergeben wollen.
    Hier kann es heruntergeladen werden.
  • Mein Empty Game Projekttemplate. Hierbei handelt es sich um ein Template, welches ich in diesem Tutorial noch öfter verwenden werde.
    Es wurde von mir schon so angepasst, dass wir Zugriff auf so ziemlich alle Klassen haben, die Delta bietet. Dadurch entfällt so mancher Schritt wie das Hinzufügen von neuen Referenzen und deren Namespaces, so dass wir direkt anfangen können mit Programmieren ohne erst noch die fehlenden Dinge zu suchen und einzufügen.
    Den Download gibt es unter Downloads.

 

Ich denke, dass die Programme allesamt von allein installiert werden können, weswegen ich darauf hier nicht weiter eingehe.
Weitere Infos gibt es übrigens hier: http://DeltaEngine.net/Wiki.Setup

 

Einrichten des Installationsordners von DeltaEngine:

Nun kommen wir zur Einrichtung unserer Delta Installation.

Vorneweg schonmal das Verzeichnis, in dem wir Delta installieren werden.

Es lautet:

C:\Delta

Ich empfehle euch, das Deltaverzeichnis genauso anzulegen, damit es am wenigsten Probleme gibt, ihr könnt Delta aber auch an jedem beliebigen Ort einrichten.

Jedenfalls, wir haben nun den Ordner angelegt, wo Delta rein soll.

Nun machen wir einen Rechtsklick auf ihn, wählen TortoiseHG und gehen in dem nun aufgehenden Untermenü auf Clone

Es sollte sich nun ein Fenster öffnen, wo bei Quelle und bei Ziel jeweils unser Ordner eingetragen wurde.
Wir lassen alles so, wie es ist und schreiben nur bei Quelle (wirklich nur bei Quelle) folgendes hinein (anstatt dem vorgegebenen Pfad):

https://hg01.codeplex.com/deltaengine

Den Rest lassen wir wie gesagt so, wie er ist und klicken nun auf Klonen.
Der Prozess dauert nun ein wenig bis er durchgelaufen ist, in der Zwischenzeit könnt ihr euch ja einen Kaffee holen oder sonst etwas.

Sobald der Prozess durchgelaufen ist, habt ihr DeltaEngine erfolgreich installiert.
Was nun folgt, sind die abschließenden Vorbereitungen, die noch nötig sind, danach geht es endlich an den Code (yay!)

 

Abschließende Vorbereitungen:

Seid ihr erstmal bis hier her gekommen, so Glückwunsch. Ihr seid nun durch das Gröbste durch.
Macht doch erst einmal eine Pause, wenn ihr wollt, das Tutorial läuft euch ja nicht davon.
Ansonsten geht es nun weiter mit den letzten nötigen Dingen und danach heißt es: „Let’s Code!“

 

Anlegen des DeltaEngine-Accounts:

Der DeltaEngine-Account ist sozusagen euer Schlüssel zur Welt von DeltaEngine. Nur mit ihm lassen sich alle Services nutzen, die Delta für uns bereithält. Dabei gilt der Account für alle Services von Delta, ihr benötigt also nicht zigtausend unterschiedliche Accounts, was die Sache doch schon vereinfacht.

Jedenfalls, wie bekommt man so einen Account?

Surft dazu einfach auf die Seite www.deltaengine.net und klickt oben rechts in der Leiste auf Login (wie auf dem folgenden Screenshot zu sehen. Bei mir steht zwar Anmelden da, allerdings habe ich auf Deutsch gestellt [dies geht, wenn ihr auf das Guest klickt])

 

 

Auf der nun aufgehenden Seite klickt ihr auf das, was ich im folgenden Screenshot markiert habe:

Es öffnet sich nun das Registrierungsformular.

Füllt einfach alle benötigten Felder aus mit euren Daten und sendet es ab.
Nun müsst ihr nurnoch euren Account bestätigen, dazu wurde euch eine Email mit einem Aktivierungslink gesendet. Klickt diesen an und euer Account ist aktiviert.

 

Anlegen der Umgebungsvariable für Delta:

Dieser Schritt ist der einfachste. Geht in euer Deltaverzeichnis, dort in den Ordner Tools und wählt den Ordner Launcher.

Klickt nun doppelt auf die darin enthaltene .exe. Sollte es eine MessageBox geben bzgl. des OptionalAssemblyPath, die euch nach Klick auf OK einen Ordner wählen lasst, so wählt ihr das Hauptverzeichnis von Delta (Der Pfad, den wir angelegt haben als wir Delta aus dem Repository gezogen haben; Wäre in diesem Fall dann C:\Delta)

Danach sollte nun folgendes Fenster erscheinen:

Hier müsst ihr nun eure Accountdaten eintragen, die ihr ausgewählt habt, als wir den Account angelegt haben.
Das Häkchen lasst ihr drin, so braucht ihr die Daten nur einmal anzugeben.

Es sollte sich nun das eigentliche Launcherfenster öffnen, allerdings brauchen wir dieses nicht.

 

Wichtig war dieser Schritt, damit die Umgebungsvariable gesetzt wird, die uns unser ganzes Arbeitsleben mit Delta begleiten wird.
Solltet ihr als Admin angemeldet sein, so sollte diese ja durch den Launcher gesetzt worden sein.
Als normaler User müsst ihr prüfen, ob diese auch angelegt wurde.
Drückt dazu auf WIN+Pause und es öffnet sich ein Fenster der Systemsteuerung.
Dort drückt ihr auf Erweiterte Systemeinstellungen und in dem neu öffnenden Fenster dann um unteren Teil auf Umgebungsvariablen. Es öffnet sich nun ein weiteres Fenster, in dem alle eure Umgebungsvariablen aufgelistet werden.
Im oberen Teil des Fensters sollte die Umgebungsvariable DeltaEnginePath stehen und als Wert der Pfad, in dem eure Deltainstallation liegt.
Sollte diese nicht aufgeführt sein, so müsste ihr diese neu anlegen. Drückt dazu auf Neu und gebt für Name folgendes an:

DeltaEnginePath

 

Als Wert der Variablen gebt ihr das Hauptverzeichnis eurer Deltainstallation an. (Nochmals: Das Hauptverzeichnis ist das Verzeichnis, in dem z.B auch der Ordner Tools liegt sowie die ganzen .sln Dateien usw)

Abschließen klickt ihr immer wieder auf OK, bis ihr nurnoch das Fenster der Systemsteuerung habt. Dieses könnt ihr nun auch schließen.

 

Einstellungen der IDE anpassen:

Nun müssen wir noch schnell die IDE anpassen, dann sind wir bereit.
Öffnet dazu Visual Studio (da ich nur VisualStudio benutze, kann ich den Weg auch nur damit erklären, bei anderen IDEs muss dies anders getan werden.

Solltet ihr die Expressversion verwenden, so müsst ihr zunächst die Experteneinstellungen aktivieren.

Geht dazu auf Extras -> Einstellungen und wählt Experteneinstellungen.
Somit habt ihr nun auch die nötigen Menüpunkte und könnt ebenso nun weiter verfahren.

Nun geht erneut auf Extras, dann auf Optionen.
Aktiviert nun zuerst die Checkbox links unten im Optionsdialog, damit ihr alle Einstellungen habt.

Danach geht im linken Teil auf Projekte und Projektmappen, scrollt ein wenig hoch, falls nötig.

Dort ändert ihr den „Speicherort von Benutzerprojektvorlagen“, also den mittleren Eintrag von oben auf den Pfad eurer Deltainstallation.
Wenn ihr dies gemacht hab, sollte dies in etwa so aussehen (Der Pfad muss natürlich angepasst werden, wenn er sich von dem Pfad unterscheidet, den ich hier in diesem Tutorial verwende. Bei anderen IDEs muss dies anders eingestellt werden, ich beziehe mich in meinem Tutorial stets auf Visual Studio.):

Damit seid ihr in der Lage, die Projekttemplates zu nutzen, die Delta mit sich bringt. (Mehr zu den Projekttemplates gibt es in einem späteren Teil)

 

Jetzt nochmals Glückwunsch, ihr habt soeben erfolgreich alle Vorbereitungen fürs Erste gemeistert. Nehmt euch nochmals einen Kaffee, macht Pause oder sonst irgendetwas, denn ab jetzt wird es besser, da wir nun anfangen, zu programmieren und ihr die Vorbereitungen mit Bravour gemeistert habt.

Dies ist natürlich alles nur freiwillig, denn ich bin mir sicher, dass manche motiviert genug sind, jetzt auch noch den Rest des Artikels zu lesen. Dies würde ich sowieso jedem empfehlen, denn es geht nun wirklich, aber echt wirklich (das sogar noch versprochen) an den Code. Und darauf habt ihr sicher eh schon alle gewartet, aber gewisse Vorbereitungen müssen ja sein, wenn wir auch richtig mit unserem Werkzeug arbeiten wollen (Ihr sägt ja auch sicher nicht Holz klein ohne entsprechende Schutzausrüstung oder wollt ihr mir sagen, ihr geht in Badehose [oder Freizeitkleidung] an die Kettensäge und sägt munter drauf los? :D)

Aber nun los, ab in den nächsten Abschnitt.

 

Der erste Code bzw. das erste Programm.

Auf diesen Abschnitt warteten sicher einige von euch und jetzt sind wir bei ihm angelangt.
Es geht um das erste Projekt, dessen Code wir nun schreiben werden.
Dabei wird es kein sehr kompliziertes Programm sein, da ich diesen Artikel nicht zu groß gestalten möchten.

Fürs erste werden wir uns damit begnügen, dass wir ein Spiel erstellen, dessen Hintergrundfarbe sich beim Klick auf einen Button ändert. Außerdem werden wir einen kleinen Text anzeigen lassen.
Klingt etwas wenig, muss aber für den ersten Teil reichen. (Ich verspreche, in den späteren Teilen wird es mehr Programmcode geben, die ersten paar Teile werden sich eher noch um paar Grundlagen handeln, die wir brauchen, damit wir ordentlich arbeiten können.)

Jedenfalls, lasst uns anfangen. Erinnert ihr euch noch an das Projekttemplate, welches ihr heruntergeladen habt?

Kopiert die Zipdatei bitte so wie sie ist unter den Pfad, den ihr im vorigen Abschnitt in den Einstellungen von Visual Studio festgelegt habt. (Solltet ihr dem Tutorial folgen, so wäre dieser Pfad C:\Delta\Tools\VisualStudioTemplates\Delta Engine)
Startet nun noch kurz Visual Studio neu, damit es die Benutzerprojektvorlagen neu einliest.

 

Geht nun auf Datei -> Neues Projekt. Es sollte nun in etwa folgendes Fenster erscheinen:

Wenn ihr alles richtig gemacht habt, sollten ganz oben die Projektvorlagen von Delta sein und an sechster Stelle (wie bei mir im Bild) meine Projektvorlage (Delta Engine Empty Game). Diese wählen wir auch aus.
Vergebt nun noch einen Namen, wählt einen Speicherort und drückt dann auf OK.

Visual Studio erstellt nun euer Projekt und die nötigen Dateien. Es sollte danach eine Datei offen sein, die in etwa folgenden Inhalt hat:

Dies ist der Code, den jedes Projekt haben wird, wenn ihr es auf Basis meines Templates erstellt.
Ganz oben finden sich die Using-Anweisungen, die euch ja nicht unbekannt sein sollten (außer den Namespaces, die kennt ihr wahrscheinlich nicht, was aber auch nicht schlimm ist). Diese habe ich in #region-Blöcke eingeschlossen, damit man sie bei Bedarf ausblenden kann und so mehr Platz im Fenster hat.
Darunter befindet sich der Namespace, die Klasse selbst, welche von DynamicModul abgeleitet ist und der Konstruktor der Klasse, jeweils immer mit passenden Kommentaren versehen.

Das einzig interessante am Code ist nun die Klasse DynamicModule, von der unsere Klasse abgeleitet wird und die Run()-Methode.
DynamicModule bezeichnet dabei nur,dass es sich um ein Modul handelt, mehr kann ich zu dieser Klasse auch nicht sagen, da sie für mich nie relevant war. Der einzige Effekt, den diese Klasse hat, ist, dass automatisch die Run()-Methode aufgerufen wird, die als unsere Gameloop dienen kann, da sie kontinuierlich aufgerufen wird.

Wenden wir uns nun aber unserem Code zu. Um unser Programm überhaupt so erstellen zu können, wie wir es haben wollen, brauchen wir eine neue Klasse. Wir machen also einen Rechtsklick auf unser Projekt im Projektmappenexplorer und wählen Hinzufügen -> Klasse. Gebt der Klasse nun folgenden Namen: FirstScreen.
Klickt auf OK und die Klasse wird erstellt. Nun kopiert ihr die Using-Direktiven aus der anderen Datei (oder von dem Code oben) und fügt diese anstelle der alten Using-Direktiven ein. (Wir nutzen so zwar mehr Usings, als nötig, allerdings macht dies auch nichts aus, da die entsprechenden Assemblies sowieso referenziert sind und die Usings ja nur die Notwendigkeit aufheben, jedes Mal den Namespace noch zu schreiben, wenn wir auf eine Klasse o.ä. zugreifen wollen)

 

Als nächstes folgt der Code für die Klasse selbst, welchen ihr einfach so abtippt. (Oder abkopiert und ihn anstelle des alten Klassencodes einfügt, ihr Copy&Paste-Nutzer :D)
Die Erklärung zum Code folgt untendrunter.

Eigentlich brauche ich zum Code nicht so viel sagen, da ich es durch die Kommentare soweit schon erklärt habe, aber ich greif es hier nochmals auf.
Zuerst deklarieren wir unser Label sowie unseren Button.
Diese werden dann im Konstruktor initialisiert und fertiggemacht mit allen benötigten Daten für unseren Fall.
Rectangle.FromCenter erstellt uns dabei ein Rechteck, dessen Mittelpunkt genau die Position ist, die wir angeben, in unserem Fall 0.5f für X und 0.25 (beim Label) bzw. 0.35f (beim Button) für Y. Die anderen beiden Parameter sind die Breite/Höhe des Rechtecks.
(Mehr zu den Controls folgt in einem späteren Teil der Serie)

Ich möchte noch kurz was zu den „komischen“ Positionsangaben erwähnen. DeltaEngine verwendet für die Bildschirmkoordinaten keine Pixel, sondern einen Bereich zwischen 0 und 1 für beide Achsen des Fensters. Dies wird dann intern auf die verfügbaren Pixel gemappt und so erzielen wir stets die gleiche Positionierung, egal, welche Auflösung das Fenster hat. (so müssen wir dies nur einmal definieren und um den Rest kümmert sich Delta)

Aber kommen wir nun zum Rest des Codes.
Nachdem die Controls initialisiert sind, wird das Clicked-Ereignis des Buttons gebunden. Ich verwende persönlich hier immer die Bindung über Delegates, wie es im Code geschehen ist, da ich so keine extra Methode definieren muss, sondern die Ereignisbehandlung direkt bei der Definition stehen kann.
Als Aktion lege ich fest, dass der Hintergrund des Screens (die Klasse ist von Screen abgeleitet) auf eine zufällige Farbe gesetzt werden soll. Das Material2DColored hat seinen Sinn, da wir z.B. auch Bilder als Hintergrund verwenden können, in unserem Fall jedoch wird das Material aus der gegebenen Farbe generiert.

Zum Schluss füge ich die Buttons noch dem Screen hinzu. Dieser kümmert sich dann von alleine um das Update und Rendern des Controls und stellt zudem sicher, dass Input entsprechend verarbeitet wird (und unser Ereignis aufgerufen wird).

Dies war der Code für den ersten Screen. Wechselt nun nochmals in die Datei Module.cs.

Dort fügt nun folgende Zeile in den Konstruktor der Game-Klasse ein (Bitte wirklich im Konstruktor, nicht in Run(), das wäre nicht so optimal:

Dies stellt sicher, dass dieser Screen geöffnet wird, sobald unser Spiel startet.

 

Wir haben nun unseren Code fertig und können das Spiel starten. Drückt einfach auf F5.
Es sollte sich nun wieder das Loginfenster zeigen, welches wir schon von vorhin kennen, als wir kurzzeitig den Launcher starteten.
Gebt eure Logindaten ein und drückt auf „Log In“

Wenn ihr alles richtig gemacht habt, sollte nun folgendes Fenster erscheinen:

Hier würden wir normalerweise unser eigenes ContentProjekt auswählen, denn dies ist das Fenster, welches festlegt, welcher Content vom Server geholt werden soll. Für diesen Teil der Serie haben wir aber kein eigenes ContentProjekt, daher wählt aus der DrowdownBox einfach Delta.Scenes.Test aus. Somit erhalten wir den Content, den wir brauchen für unser Programm. (Mehr zu ContentProjekten und so gibt es auch später)
Wenn das getan ist, dann sollte normalerweise unser Spiel aufgehen und wir sollten folgendes Fenster sehen:

Sollte dies nicht der Fall sein, da sich der Editor öffnet und Exceptions geworfen werden usw, dann liegt ein Fehler vor.
Delta hat ein eingebautes Errorlogging, welches einen unterrichtet, wenn Exceptions abgefangen wurden und diese kritisch sind, so dass das Spiel nicht weiterlaufen kann. (Andernfalls erscheint das Editorfenster erst nach Beendigung des Programms, falls es zu Fehlern kam.)
Wahrscheinlich wird wieder ein wenig etwas im ContentSystem spinnen, was normal ist, da Delta immerhin im Beta-Status steckt.

Probiert es einfach nocheinmal zu debuggen und es sollte normalerweise funktionieren. (wenn nicht, so schreibt es mir in die Kommentare bzw. postet das Log im Forum von DeltaEngine)
Ich weiß, es ist nicht alles wirklich gut zu lesen, aber das ist halt eben alles Standard, was wir bisher nutzen.
Später werden wir eigene Grafiken und Designs nutzen, die besser miteinander harmonieren und lesbarer sind, als momentan.

 

Glückwunsch, ihr habt euer erstes Spiel geschrieben. Es macht zwar noch nicht seht viel, aber das reicht für den Anfang.
Immerhin haben wir schon einmal Delta installiert und ein wenig etwas kennengelernt, was uns später noch häufig genug begegnen wird.

Wenn ihr wollt, könnt ihr jetzt noch ein wenig herumexperimentieren, schaut euch dazu die ganzen Samples an, die mit Delta mitgeliefert werden. (Ihr findet sie über den SampleBrowser im Tools-Ordner)

Schlusswort:

Das war es auch schon für diesen Teil. Es ist, meiner Meinung nach, schon ein relativ großer Teil geworden, die anderen Teile werden wahrscheinlich nicht so groß, kommt auf den Stoff an, über den ich schreiben werde
Im nächsten Teil werden wir die Tools, die mit Delta mitgeliefert werden, genauer unter die Lupe nehmen und werden auch mindestens eines der Tools schon gebrauchen können, um unser Programm noch etwas zu erweitern

 

Ich möchte mal noch den Beitrag an sich erwähnen. Die Themenfindung, Bearbeitung, Aufbesserung usw des Beitrags hat mich über mehrere Tage hinweg mindestens 6 Stunden gekostet. Ich hoffe, dies ist aus der Qualität des Beitrags ersichtlich.
Falls ihr euch fragt, wieso solch eine Mühe, dann sag ich soweit nur, dass ich dies zu euren Gunsten mache.
Im Internet findet man viele Tutorials zu vielen Themen. Dabei ist leider aber auch einiges dabei, was nicht so zu empfehlen ist.

Genau das will ich allerdings vermeiden. Meine Tutorials sollen Qualität aufweisen und es geht mir ebenso um Qualität, nicht Quantität. Lieber einen guten Beitrag (auch wenn er etwas größer wird und mich Zeit kostet) als mehrere kleine, schlechte Beiträge.
Ihr werdet mir die Mühe sicher würdigen. (Hoffe ich zumindest mal)

Ich möchte mit diesem Absatz allerdings nicht irgendwie sagen: „Schätzt meine Arbeit und gebt mir Geld!“ usw.
Viel eher wollte ich mal kurz erwähnen, wie viel Arbeit ich in diesen Beitrag reingesteckt habe, damit man sich ein Bild davon machen kann, was gute Tutorials an Zeit und Ressourcen benötigen.

Ein Wort noch zu den Quelltexten, die in diesem Beitrag zu finden sind. Ich habe, während ich diesen Beitrag geschrieben habe, u.a noch ein paar Fehler in meinem Template gefunden und ausgemerzt. Dabei habe ich auch die Quelltexte in diesem Beitrag geupdated sowie die Downloads der betroffenen Dinge.
Dennoch kann es sein, dass mir ein Fehler unterlaufen sein könnte. Daher bitte ich euch, wenn etwas nicht funktionieren sollte, so schreibt mir einfach einen Kommentar mit einem Hinweis und ich kümmere mich darum.

 

Ich hoffe, es hat euch schonmal gefallen und es würde mich freuen, wenn ihr mir einen Kommentar hinterlassen würdet.
Wenn ich sehe, dass meine Beiträge gut ankommen, bin ich sicher motivierter, weiterzuschreiben. (Was nicht heißen soll, dass ich nur durch euer Feedback weiterschreibe :D, so ist es nicht.)
Natürlich könnt ihr den Beitrag auch teilen über die Icons am Ende.
Ansonsten wünsche ich euch noch viel Spaß beim ausprobieren und evtl. beim Selbststudium, so wie ich es getan habe, um den Umgang mit Delta zu erlernen
Wir sehen uns dann beim nächsten Teil.

 

Bis dann

~internetfreak

 

Downloads:

Wie immer zum Ende eines jeden Teils der Serie findet ihr hier die Downloads des Teils auf einen Blick und könnt diese so bequem herunterladen.

Einmal hätten wir hier das EmptyGame-Template, welches unter den benötigten Dingen angesprochen wurde:

Emtpy Game Template
Emtpy Game Template
EmptyGame.zip
Version: 1.2.0.0
8.2 KiB
92 Downloads
Details

Zum anderen hier der Sourcecode des aktuellen Teiles:

Teil1 Source
Teil1 Source
DETutorialTeil1Source.zip
Version: 1.0.0.0
2.2 MiB
72 Downloads
Details

 


Die "Spieleentwicklung mit DeltaEngine"-Reihe

 

9 Gedanken zu „[S1.01] Spieleentwicklung mit DeltaEngine Teil 1: Vorbereitungen und erster Code

  1. Icii

    Ich werd mal den ersten Kommentar hier verfassen.

    Zuerst einmal:
    Ich beschäftige mich nicht mit C# und auch nicht mit der Delta Engine, deswegen solltest du lieber kein direktes Feedback erwarten. Der Grund warum ich dennoch dieses Tutorial gelesen habe (Und wahrscheinlich die folgenden Lesen werde.) ist, das ich mich anderweitig mit der Spieleprogrammierung beschäftige. (DirectX/C++) Und hey, mehr über Spieleentwicklung lernen kann nie Schlecht sein, auch wenn die Methoden sich unterscheiden ^_^

    Zu dem Tutorial an sich:
    Es gefällt mir Recht gut, soweit ich das beurteilen kann. Aufjedenfall gefällt mir deine Schreibweise.
    Allerdings würde ich mir eine bessere Gliederung wünschen. Zum Beispiel, wenn du eine Funktion erklärst. Zuerst den Namen der Funktion in fetter Schrift, ein Doppelpunkt, und nach der Beschreibung eine Leerzeile.
    Da ich ein C#/.NET-Noob bin, kann ich nicht direkt sagen, ob es hier eine Funktion von Delta gibt, aber ich denke bei „LocalArea = Rectangle.FromCenter(0.5f, 0.35f, 0.33f, 0.07f),“ hätte man das anbringen können.

    Eine andere Sache ist, das mir das Code-Fenster nicht gefällt. Ich persönlich bevorzuge es, den Code im ganzen zu sehen, und nicht scrollen zu müssen. Wobei das natürlich nur ein „Schönheitsfehler“ ist.

    Hmm, was gibts noch zu sagen? Irgendwie fällt es immer leichter, den Finger auf die Schwachstellen zu legen, als das Positive hervorzuheben. Aber lass dir gesagt sein, das mir das Tutorial im großen und ganzen sehr gut Gefallen hat.

    1. internetfreak Beitragsautor

      Danke für deinen Kommentar und die Kritik.
      Es ist mein erstes Tutorial in dieser Form, die früheren waren z.B mehr als 50% kleiner und nicht so gut gestaltet, wie dieses hier (also mit Inhaltsverzeichnis usw)
      Zu den Funktionen meinst du also, ich soll erwähnen, ob es eine Funktion ist, die von Delta stammt? Oder hab ich das nicht recht verstanden?
      Ich werde mal versuchen, deine Punkte im nächsten Teil zu berücksichtigen, sofern es geht.

      Zur Codebox: Die wurde von mir bewusst so gestaltet, weil sie in ihrer vollen Länge den Beitrag nur unnötig in die Länge ziehen würde.
      Daher hab ich die beschränkt, vorallem, da der Code nicht „relevant“ ist (man hat ihn sowieso, wenn man dem Tutorial folgt)
      Aber mal sehen, was sich auch hier machen lässt.

      Ansonsten, wie du schon sagtest, man findet schneller das Negative statt das Positive. Aber es ist auch gut so, denn die negativen Punkte sind die, die man verbessern sollte.

      Ich würde mich jedenfalls freuen, wenn du öfter mal reinschauen würdest, ich versuche, hier jetzt mal ein wenig aktiver zu sein im Vergleich zum alten Blog (da kam vll mal ein Beitrag im Monat und selbst dieser war nicht immer sinnvoll)

        1. internetfreak Beitragsautor

          Ah, ich verstehe.
          Also war das so gemeint, dass ich halt eben den Code liefern soll und danach noch die Funktionen, die darin vorkommen und unbekannt sind/sich geändert haben, erklären soll.
          Das lässt sich einrichten, werd ich dann in den weiteren Teilen übernehmen, ist kein Problem. Muss schauen, inwiefern ich es umsetzen kann, da der zweite Teil auch noch weniger codelastig sein wird, ab dem dritten Teil wirds wahrscheinlich eher mehr codelastig zugehen, hab noch keine genauen Pläne von den weiteren Teilen nach dem zweiten Teil.
          Mir war zuerst nicht so ganz klar, wie das gemeint war.

          Ansonsten, zur Codebox, wir würdest du dir das vorstellen?
          Ich kann die Limitierung der Höhe auch wieder rausmachen/erhöhen, hab ich nur eingestellt, weil halt wie gesagt sonst der Beitrag durch die Codebox zu lang geworden wäre.

          Zum Schluss würd ich gern mal fragen, wie du eigentlich auf den Blog aufmerksam wurdest? Google sollte ja mittlerweile soweit alle alten Bloglinks draußen haben und sonst weiß ich nich, wie die Ergebnisse so aussehen (Ich such selbst nicht nach meinem Blog per Google :D)

  2. Icii

    Hmm, die Codebox.
    Also ich würde gerne den Gesamten Code am Stück sehen. Aber der Nachteil ist natürlich, das der Blogeintrag dann ziemlich lang wird. Also, ich denke die Codeabschnitte möglichst kurz halten. (Das hilft dann auch etwas der Gliederung und Übersichtlichkeit.) Oder vllt alles in einen Spoiler packen. Ich denker, das man das recht Dynamisch entscheiden kann, wann man den Code kpmplett anzeigt, und wann nur einen Teil, aber ich bin halt echt kein Fan von Extrafenstern, wo man scrollen muss.

    Also, zuerst hab ich den Blog über MCore gefunden. Durch einen Browserwechsel hab ich dann das Lesezeichen nicht mehr gehabt. (Ich kann endlich wieder Opera benutzen, ohne störende Lags <3). Als mir wieder eingefallen ist, das ich ja mal gucken könnte, ob sich hier was getan hat, hat das simple Googlen nach deinem Nicknamen gereicht.

    1. internetfreak Beitragsautor

      Gut, ich muss zugeben, hier in diesem Teil war es einiges an Code. Die eine Codebox hätt ich weglassen können, da der Code ja sowieso schon im Projekt vorhanden war durch mein Template.
      Bei der zweiten Codebox hätt ich es können wohl ein wenig mehr aufteilen in mehrere Boxen. Ich werde wohl die Höhenbeschränkung ein wenig lockern und erhöhen, die liegt momentan glaube ich bei 500px, denke 600-700px könnens durchaus sein (Der Beitrag ist schon lang genug und so wird die Codebox hoffentlich nicht zu sehr ins Gewicht fallen, was die Länge angeht. Denke auch, dass dieser Teil der vorerst längste der Serie gewesen sein wird aufgrund der Menge an Dingen, die erledigt werden mussten)

      Ein Spoiler finde ich jetzt nich so nett, zumindest nicht mitten im Beitrag, zudem hab ich glaube ich kein gutes Plugin gefunden gehabt (hab aber auch nich lange nach gesucht)
      Für den zweiten Teil (und die folgenden Teile) werde ich dann hingehen und den Code wohl mehr aufspalten in kleinere Teile. Wie gesagt, ich muss schauen, was ich tun kann und was nicht (hängt davon ab, was ich so alles an Themen für die nächsten Teile bringe)

      Der zweite Teil könnte wohl ein wenig dauern, bis der kommt, da ich erstmal an meinem Projekt arbeiten möchte. (hab ich ja auch als Post angekündigt)

      Dennoch finde ich es nett, dass du mir in Form eines bzw. mehreren Kommentaren deine Meinung zu diesem Post genannt hast und es würde mich sehr freuen, wenn du auch weiterhin vorbeischaust und die ein oder andere Meinung dalässt, wenn es etwas neues gibt.

  3. Eugen

    Hi,
    sehr hilfreiches Tutorial, danke.
    Das VS Template funktioniert bei mir nicht, ich bekomme die Fehlermeldung:
    „Unable to copy the file ‚Module.cs‘ from the project template to the project. Cannot find file „…\Appdata\Local\Temp\wcz2yofi.cnx\Temp\Module.cs“

    1. internetfreak Beitragsautor

      Hmm, sehr komisch.
      Ich hab erst vor kurzem selbst mal mit dem Template gearbeitet (hab ein neues Projekt angelegt und eben mein eigenes Template genommen) und bin dabei auf einige Ungereimtheiten gestoßen (fehlende using für Zugriff auf die Font-Klasse; Fehler in der Art wie du sie hattest)
      Habs halt eben korrigiert und dann neu hochgeladen, sollte normalerweise funktionieren.
      Aber danke für den Hinweis, werde prüfen, ob der Download auch auf die richtige Datei verweist (hab nur die Datei auf dem FTP aktualisiert, da ich dachte, das reicht.)
      Probier es in paar Minuten nochmal

      1. internetfreak Beitragsautor

        So, behoben.
        Hab die Ursache gefunden, die Datei wurde anscheinend gecached, was natürlich bei so Dateien nicht vorteilhaft ist.
        Nun aber wird die korrekte Version ausgeliefert.
        Einfach neu herunterladen, dann funktioniert es.

        Wenn weitere Fragen sind, meld dich einfach.

Kommentare sind geschlossen.