Duality

Übersicht Sonstiges Smalltalk

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Fetze

Betreff: Duality

BeitragMi, Mai 25, 2011 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho alle zusammen,

hab ja hier schon ne Weile nix mehr von mir hören lassen, da mein Worklog mittlerweile Teil meines Blogs ist. Da die Anzahl meiner Leser aber vermutlich nicht sonderlich hoch ist und ich mich über ein paar Tester freuen würde, dachte ich mir, es wäre mal wieder an der Zeit Very Happy

user posted image

Nach dem Release von Nullpunkt hab ich mit der Entwicklung eines 2D GameDev Frameworks für C# / .Net 4.0 begonnen und das ganze Duality getauft. Anders als ZweiDe, das einige hier vielleicht kennen, ist Duality aber keine reine Library, die man einbindet, sondern soll mal eine komplette Engine inklusive grafischem Editor werden. Es ist so ausgelegt, dass man nicht zwingend bereits Erfahrung im Aufsetzen und Veröffentlichen von C# oder .Net Projekten haben muss sondern "direkt anfangen" kann.
Ich spare mir mal eine ausführliche Erklärung in Textform, denn ich hab für den Release sowieso eine Art Demo / Tutorial Video veröffentlicht, in dem ich ein bisschen was vorführe, hier könnt ihr mal reinschauen: --> Demo Video (engl.) <--

Wenn ihr selbst damit herumspielen wollt, müsst ihr das .Net Framework 4.0 installiert haben - und falls ihr auch Spiellogik coden wollt, ebenfalls Visual C# 2010 Express (oder alternativ Visual Studio 2010). Je nach Betriebssystem und Update-Zustand habt ihr .Net 4.0 möglicherweise sowieso bereits installiert.

Wäre cool wenn sich ein paar Leute fänden, die mal nen Blick drauf werfen und mir mit Bug reports, Kommentaren und Feature Requests aushelfen würden Smile Feedback aller Art erwünscht!


Edit: Whoops, Downloadlink vergessen. Hier ist er, viel Spaß Wink
  • Zuletzt bearbeitet von Fetze am Do, Jul 07, 2011 14:01, insgesamt einmal bearbeitet
 

Macintosh

BeitragMi, Mai 25, 2011 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Woooooow... das schaut ja mal mächtig cool aus :)
Leider habe ich kein Windows :/

BlueM

BeitragDo, Mai 26, 2011 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja sieht sehr nett aus. Allerdings habe ich auch keinen Windows Pc zum testen. Was mich aber viel mehr interessieren würdeist, ob du dir mit diesem Projekt ein Ziel gesetzt hast oder du "ins blaue " programmierst. Oder das ganze für einen höheren Zweck dient.

Fetze

BeitragDo, Mai 26, 2011 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
BlueM hat Folgendes geschrieben:
Was mich aber viel mehr interessieren würdeist, ob du dir mit diesem Projekt ein Ziel gesetzt hast oder du "ins blaue " programmierst. Oder das ganze für einen höheren Zweck dient.


Primäres Ziel ist es, mit Duality eine Entwicklungsumgebung zu schaffen, mit der man sehr schnell mal ein 2D Game prototypen kann, die unkompliziert sowie möglichst vielseitig ist und gleichzeitig auch für größere Projekte taugt. Das ganze soll dabei vom Entwickler durch Plugins maximal Erweiterbar sein. Duality versucht dabei den Spagat zwischen Level- / Content-editor und Game Engine während es gleichzeitig sehr nah am Sourcecode arbeitet.
(Außerdem will ich mich natürlich als Entwickler weiterbilden, C# 4.0 und OpenTK besser kennenlernen und mich in anderen Bereichen "einen Level weiter" bringen, und schlussendlich interessiert mich die ganze Sache einfach.)

Wenn alles glatt läuft und ich noch eine Weile dabei bleibe hoffe ich darauf, meine zukünftigen Spiele in Duality entwickeln zu können. Eine ganz besondere Freude wärs mir, wenn Duality gut genug wird, um auch von anderen für ihre Projekte verwendet zu werden. Das ist auch mit ein Grund für öffentliche Tests: Um frühzeitig zu erkennen was fehlt, was nicht funktioniert und was verbessert werden kann.

Übrigens ist Duality auch OpenSource. Wer also mal einen Blick auf den Code werfen will, um beispielsweise zu sehen, wie der SpriteRenderer implementiert ist, der werfe mal einen Blick hier drauf. Das ganze ist bei Google Code eingecheckt, ihr braucht TortoiseSVN o.Ä. um das ganze auszuchecken. Oder klickt einfach auf den "Browse"-Tab auf der Website und ihr könnt direkt online einen Blick auf die einzelnen Files werfen. Wer will kann so auch permanent up-to-date bleiben, der Code dort ist genauso aktuell wie der auf meiner Festplatte.

So. Und jetzt hoffe ich mal dass sich vielleicht doch noch ein paar Leute finden, die das ganze mal antesten Wink

Moep

BeitragFr, Mai 27, 2011 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ersteinmal Respekt !

Habs mir eben kurz angeschaut und werde es auch noch weiter testen.

Das was mich bishierhin unglaublich nervt xD:

Beschleunigte Kamerabewegung und Rotation innerhalb des Editors.


mfg
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

Fetze

BeitragFr, Mai 27, 2011 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, da bist du schon der zweite, der das anmerkt. Ich dachte eigentlich, das mit der beschleunigten Kamerabewegung sei so eine ganz gute Lösung. Confused

Mal anders herum gefragt: Wie sollte es denn sein, damit du zufrieden mit der Kamerabewegung wärst? Smile

Moep

BeitragFr, Mai 27, 2011 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, halt sofortig :

Key[Left].Down -> x-=1

oder für Maus halt x=oldx+differenz die man "gezogen" hat

whatever, ich denke du weißt was ich meine und kannst dir selber den code dazu denken^^

mfg
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42

Achtung: Suchtgefahr!
moep123.ohost.de

Fetze

BeitragFr, Mai 27, 2011 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, also dann "dasselbe" nur ohne Beschleunigung. Ich probier bei Gelegenheit mal damit rum - und schau dann auch gleich noch, Kamerabewegungen mit den Cursortasten einzubauen, also der Tastatur, falls noch nicht geschehen. Ich glaube, da hatte ich bisher nicht dran gedacht, jetzt wo du's ansprichst.

ToeB

BeitragFr, Mai 27, 2011 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sonst einfach alternativ einen Punkt im Einstellungs-Menü einrichten, bei dem die Beschleunigte Bewegung wahlweise an und ausschalten kann Wink

Aber sehr schönes Projekt, ich drück dir die Daumen das du es zu deiner Zufriedenstellung fertig machst !

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Fetze

BeitragDi, Jun 07, 2011 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
So, mittlerweile gibts auch Sound und, gerade frisch eingebaut, animierte Sprites. Letztere haben ein kleines Zusatzfeature namens "smooth animation", welches die einzelnen Frames nicht einfach umschaltet sondern weich ineinander übergehen lässt. Das wirkt insbesondere dann Wunder, wenn man eine Spriteanimation langsamer abspielt als vorgesehen oder von vornherein zu wenige Frames hatte als dass sie wirklich flüssig gewirkt hätte.

user posted image

Wer das ganze mal in Aktion sehen will, der kann sich die Demo dazu hier herunterladen. Archiv entpacken, DualityLauncher.exe starten und angucken. Wer damit herumspielen will, der Editor ist natürlich ebenfalls in der aktuellen Version dabei. Smile


PS: Nichtbeschleunigte Kamerabewegung ist im Editor jetzt ebenfalls verfügbar. In der Aktionsleiste einer Kamera gibt es einen neuen Button, der beschleunigte Bewegung aktiviert oder deaktiviert.

Xaymar

ehemals "Cgamer"

BeitragDo, Jun 09, 2011 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Nice, bei der Smooth Animation Methode merkt man fast gar nicht das das frames sind, die blenden einfach perfekt über. Nur so mal als frage: Nimmst du immer das vorige angezeigte frame und blendest das über?
Warbseite

Fetze

BeitragDo, Jun 09, 2011 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Nice, bei der Smooth Animation Methode merkt man fast gar nicht das das frames sind, die blenden einfach perfekt über.

Ja, hat mich auch überrascht Very Happy Unser Auge lässt sich in bestimmten Fällen offenbar relativ einfach austricksen. Very Happy

Zitat:
Nur so mal als frage: Nimmst du immer das vorige angezeigte frame und blendest das über?


Ich berechne beim Rendering zu welchem Anteil die beiden aktuellen Frames (letztes und kommendes) jeweils sichtbar sind und zeichne das Sprite zweifach, jeweils mit entsprechend angepassten Texturkoordinaten und individuellem Alphawert. Effektiv ist das also einfach ein lineares Überblenden zwischen den beiden Frames.

Unter Benutzung separater Quads, also mit der "Doppelt zeichnen"-Technik funktioniert das ganze aber nur mit additivem Blending! Alle anderen Blendmodes machen das nicht mit. Zur Illustration: Zeichne ich zwei additive Frames mit jeweils Alpha 50%, addieren sie sich zu 100% auf. Zeichne ich jedoch im Alphablending erst Frame 1 mit 50% und auf das Ergebnis dann Frame 2 mit wieder 50% ist die insgesamte Überdeckung nur 75%, nicht 100%. Hier funktioniert das also nicht, oder nur mit Tricks, und wirkt insgesamt nicht so flüssig wie hier im additiven Beispiel.

Ich plane momentan, diesen weichen Übergangseffekt durch Benutzung von Shadern für alle Blendmodes gleichermaßen zu unterstützen. Dabei wird dann nicht das Sprite doppelt gezeichnet, sondern lediglich einmal mit doppeltem Set von Texturkoordinaten und einem zusätzlichen Vertexattribut für den aktuellen Übergangsfaktor.

coolo

BeitragFr, Jun 10, 2011 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Äußerst interessant!

Kanns leider nicht testen, weil wie es aussieht das ganze nicht unter Linux lauffähig ist.

Darf ich fragen, wie du die Kommunikation zwischen den einzelnen Components gelöst hast?
Mir würde spontan die Möglichkeit einfallen, dass jedes Component eine Referenz auf das zugehörige GameObject besitzt. Doch was, wenn nun eine Component zu mehreren GameObjects gehört? Zum Beispiel, wenn zwei Objekte dieselbe Position haben sollten, dass sich diese die Transform Component teilen. Oder ist so etwas nicht von der Engine vorgesehen?


Viel Spaß & Motivation noch Very Happy
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

Fetze

BeitragFr, Jun 10, 2011 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Also grundsätzlich gehört eine Komponente immer zu genau einem GameObject, sie kann nicht zu mehreren gleichzeitig gehören. Ist eine Komponente keinem GameObject zugewiesen wird sie für die Engine "unsichtbar" als würde sie nicht existieren. So ist es per Skript zB. möglich, Komponenten zwischen GameObjects auszutauschen, zu klonen oder zwischenzuspeichern und später wieder an das Objekt anzufügen.

Jede Komponente kennt das GameObject zu dem sie gehört natürlich. Die Kommunikation zwischen einzelnen Komponenten findet ebenfalls darüber statt, wobei es natürlich möglich ist, sich in der Komponente lokal eine Referenz auf die anderen Komponenten zu halten, um nicht jedes Mal dieselbe Abfrage machen zu müssen. Konkret sieht das so aus:
Code: [AUSKLAPPEN]
public void SomeComponentFunction()
{
   SoundEmitter emit = this.GameObj.GetComponent<SoundEmitter>();
   emit.DoSomething();
}

Bzw. mit zwischenspeichern der Referenz ("einfache" Variante):
Code: [AUSKLAPPEN]
public class MyComponentType : Component
{
   private   SoundEmitter   tempEmitRef   = null;
   
   public void SomeComponentFunction()
   {
      if (this.tempEmitRef == null) this.tempEmitRef = this.GameObj.GetComponent<SoundEmitter>();
      this.tempEmitRef.DoSomething();
   }
}


GetComponent<T>() ist dabei jedesmal ein Dictionary-Lookup mit der Reflection-Klasse zum angeforderten Typ T. Das geht ziemlich schnell, aber für extrem häufig verwendete Komponenten (wie die Transform-Komponente) gibt es in der GameObject-Klasse auch einen performanten (nicht-lookup) Direktzugriff:

Code: [AUSKLAPPEN]
public void SomeComponentFunction()
{
   this.GameObj.Transform.DoSomething();
}


Eine Komponentenklasse kann auch die Existenz bestimmter anderer Komponententypen voraussetzen, indem der Komponentenklasse ein entsprechendes Attribut (bzw. mehrere davon) hinzugefügt wird. Hier zB. die Camera-Komponente die eine Transform-Komponente verlangt:

Code: [AUSKLAPPEN]
[Serializable]
[RequiredComponent(typeof(Transform))]
public sealed class Camera : Component, IDrawDevice
{
   
}


Verwendung findet das Attribut jedoch nur im Editor, wo es nicht möglich ist, ein GameObject zu erschaffen, welches eine Camera-Komponente, jedoch keine Transform-Komponente besitzt. Zur Laufzeit per Skript lässt sich ein solcher Zustand trotzdem herbeiführen, wenn man es drauf anlegt.

Den Fall den du ansprichst - dass zwei Komponenten sich dieselbe Position teilen - kann man relativ einfach über den Szenengraph lösen. Ein GameObject kann ein Parent-GameObject haben und n Child-GameObjects. Eine Transform-Komponente verwaltet intern nur relative Koordinaten - relativ zur im Szenengraph nächsthöher gelegenen Transform-Komponente oder eben dem Ursprung wenn da keine mehr kommt. Wenn ich zwei GameObjects an derselben Position will kann ich also entweder das eine an das andere parenten oder aber beide an dasselbe Ober-Objekt. Dabei ist dann nicht nur dieselbe Position möglich, sondern generell die komplette Bewegung relativ zum Oberobjekt. Man könnte zB. unser Sternensystem über einen Szenengraph relativ einfach lösen, ich denke dabei an "Erde kreist um Sonne, Mond kreist um Erde".

Das ganze läuft momentan leider in der Form noch nicht unter Linux, ebenso auf dem Mac. OpenTK unterstützt an sich aber beide Betriebssysteme - es wäre also einen Versuch wert, das zu gegebener Zeit mal auszuprobieren. Momentan fehlen noch die Konfigurationsdateien für die .Net Assemblies, die notwendig sind, damit Mono das ganze unter Linux und Co starten kann, aber früher oder später werd ich da mal nen Blick drauf werden.

Fetze

BeitragSa, Jul 09, 2011 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein weiterer Videoblog-Eintrag, diesmal zum Thema Sprite Animation, Text Rendering und Postprocessing:
--> Link <--

Feedback, Fragen, Anmerkungen wie immer willkommen Smile

coolo

BeitragSa, Jul 09, 2011 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Coole Sache!

Vor allem der Workflow sieht sehr angenehm und effizient aus Smile.
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

Vertex

BeitragMo, Jul 11, 2011 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Fetze,

ich schaue ab und zu hier rein, und finde Dein Projekt toll. Hatte vor einem Monat mal mit JavaFx herumgespielt (eine ähnliche API für Vektorgrafiken) und kann nur sagen, bei soetwas fehlt es an vernünftigen Editoren. Deswegen ist es nur sehr gut, dass Du gleichzeitig einen Editor mit Live-Vorschau bereitstellst.

Viel Erfolg mit dem Projekt!

Ciao Olli
vertex.dreamfall.at | GitHub

Fetze

BeitragDo, Aug 11, 2011 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@Vertex & coolo: Danke! Smile

Gerade hab ich Videoblog #3 online gestellt. Direkt dazu gibts nen neuen Demo Release von Duality, der mit einem kleinen Asteroids-Klon daher kommt, welcher --> hier <-- heruntergeladen werden kann.

Feedack jeder Art, ob zu Duality, Asteroids oder Blog ist wie immer willkommen Smile

Fetze

BeitragMi, Aug 31, 2011 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Mittlerweile gibt es auch eine komplette API-Referenz für Duality, sowohl online als auch in Form einer im Downloadpaket des aktuellen Releases enthaltenen .chm-Datei. Dazu gibts auch einen weiteren, diesmal recht kurzen --> Videoblog <--, in dem es unter anderem um das neue, in den Editor integrierte Hilfesystem geht.

Die aktuellen Entwicklungen stehen damit klar im Zeichen der Einsteigerfreundlichkeit. Wie immer bin ich für Anregungen und Gedanken offen Smile

Fetze

Betreff: Sandbox, Xml und Physik

BeitragDo, Feb 16, 2012 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Lang lang ists her. Tjaja, das Real Life forderte seinen Tribut Very Happy In den letzten Monaten hat sich aber trotz jeglichen Newsmangels einiges getan an Duality und ich dachte mir, es ist mal wieder an der Zeit, ein paar Binaries in die Welt zu schmeißen und herauszufinden, was damit passiert Wink

Im aktuellen Videoblog erkläre ich kurz, was so die größten Neuerungen sind. Im Wesentlichen der neue Sandbox-Mode, der es ermöglicht, das Spiel direkt im Editor zu starten, sowie eine integrierte Physikengine. Außerdem kann man seine Ressourcendateien jetzt als XML speichern statt binär.

Die neue Asteroids-Demo (mit Physik Laughing ) gibts --> hier <--

Feedback willkommen und falls sich jemand findet, der mutig genug ist, Duality für irgendwas sinnvolles zu benutzen: Fragen werden natürlich gerne beantwortet, Support gibts soweit ichs zeitlich schaffe Wink

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group