Duality
Übersicht

![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey, das ist mal was cooles. Find ich sehr gut. Die einzigen beiden Sachen, die ich noch zu bemängeln habe sind:
-) Die Kamera bewegt sich im Sandboxmode nicht so wie im echten Spiel. Vielleicht hast dus schon so drin und ich bin nur blind, aber es wär gut, wenn mans einstellen kann, dass die Sandbox-Mode-Editor-Kamera der echten Spielkamera folgt. Sollte an/abschaltbar sein, so dass man auch die Editorfunktionen sinnvoll verwenden kann. -) Nachdem ich das Asteroids-Spiel für ne Weile gespielt hab (haufenweise gecheatete Kanonen im Sandbox-Mode) (runde 38k Punkte) hat es sich mit einer Unhandled Exception verabschiedet, der ganze Editor und das Spiel. Ich bin hier auf Win Vista unterwegs. Ansonsten gute Arbeit. Ich bin im Moment zu faul, um mich einzuarbeiten, und ich programmier gerne etwas platformunabhängiger, ansonsten hätte ich mir Duality ernsthaft angeschaut, da es doch sehr cool zu sein scheint. Vorallem die eingebaute Physik-Engine ist was Tolles. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
DAK hat Folgendes geschrieben: -) Die Kamera bewegt sich im Sandboxmode nicht so wie im echten Spiel. Vielleicht hast dus schon so drin und ich bin nur blind, aber es wär gut, wenn mans einstellen kann, dass die Sandbox-Mode-Editor-Kamera der echten Spielkamera folgt. Sollte an/abschaltbar sein, so dass man auch die Editorfunktionen sinnvoll verwenden kann. Im Camera-Fenster des Editors ist oben links so eine ComboBox, wo du den Bearbeitungsmodus wählen kannst. Standard ist Scene Editor, dann gibt es noch Collider Editor - und Game View. Letzterer tut genau das, was du gerne hättest ![]() DAK hat Folgendes geschrieben: -) Nachdem ich das Asteroids-Spiel für ne Weile gespielt hab (haufenweise gecheatete Kanonen im Sandbox-Mode) (runde 38k Punkte) hat es sich mit einer Unhandled Exception verabschiedet, der ganze Editor und das Spiel. Ich bin hier auf Win Vista unterwegs. Ah, blöd. Kannst du mir mal per PN deine logfile_editor.txt schicken? Oder alternativ den Callstack im Error-Fenster der Unhandled Exception, falls du den Fehler reproduzieren kannst. |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, ok, hab ich nicht gesehen, das mit der Kamera.
Das Logfile hab ich dir geschickt. Ich frag mich grad, obs vielleicht sinnvoll wär, wenn du vielleicht vorgefertigte sample Codes beizulegen, die man dann einfach direkt einbinden könnte. So, z.B., dass Leute, die nicht coden können, den Editor auch verwenden können. Von wegen, stell dir vor, du willst einen Spaceshooter machen, dann klickst du dir dein Schiff zusammen, wie gewohnt, wählst dann in Duality aus von wegen "GameLogic: Space Ship", hast dann noch ein paar Regler/Felder wo du Sachen wie Beschleunigung, Gewicht, Maximalgeschwindigkeit und so weiter auswählst, dann wählst du die Tasten aus mit denen mans steuern soll und nach einem Klick auf OK hast du dein fertiges, steuerbares Schiff. Und das dann noch mit ein paar anderen Sachen, wie z.B. Autos oder so. Vielleicht wär das ne Idee wert. Wobei Autos und Raumschiffe unterscheiden sich nur darin, wie stark sie driften, und das läße sich auf über einen Regler einstellen. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
DAK hat Folgendes geschrieben: Ich frag mich grad, obs vielleicht sinnvoll wär, wenn du vielleicht vorgefertigte sample Codes beizulegen, die man dann einfach direkt einbinden könnte. So, z.B., dass Leute, die nicht coden können, den Editor auch verwenden können. Von wegen, stell dir vor, du willst einen Spaceshooter machen, dann klickst du dir dein Schiff zusammen, wie gewohnt, wählst dann in Duality aus von wegen "GameLogic: Space Ship", hast dann noch ein paar Regler/Felder wo du Sachen wie Beschleunigung, Gewicht, Maximalgeschwindigkeit und so weiter auswählst, dann wählst du die Tasten aus mit denen mans steuern soll und nach einem Klick auf OK hast du dein fertiges, steuerbares Schiff. Und das dann noch mit ein paar anderen Sachen, wie z.B. Autos oder so. Vielleicht wär das ne Idee wert. Wobei Autos und Raumschiffe unterscheiden sich nur darin, wie stark sie driften, und das läße sich auf über einen Regler einstellen. Duality ist kein GameMaker. Es ist ein Framework und Toolset, um Entwickler zu unterstützen - nicht, ihnen mit vorgefertigten Regeln vorzuschreiben, wie ihr Spiel auszusehen hat ![]() Da sowohl Core als auch Editor 100% pluginbasiert sind, steht es natürlich jedem frei, selbst ein paar solcher Standardkomponenten zu erstellen und frei verfügbar zu machen. Wer entwickeln will ohne zu coden müsste dann lediglich die Plugins in den entsprechenden Ordner kopieren und könnte loslegen. Es ist also ohne Weiteres möglich, Duality in Richtung GameMaker zu bewegen, aber ich werde mich daran nicht beteiligen. Was ich natürlich entwickeln und pflegen werde, sind solche Standardkomponenten, die nicht an vorgefertigte Spielregeln geknüpft sind, zB. Partikelsysteme, Tilemaps oder eben die frisch hinzugekommene Physik ![]() |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, ich hab hald gemeint, dass es doch recht einfach möglich wäre, das ganze 'Game-Maker-tauglich' zu machen, aber gleichzeitig den Entwicklern freizustellen den Code direkt selbst zu schreiben. Aber ich verstehe deinen Punkt ganz gut.
Mir gefällt das Projekt, könnte sich gut gebrauchen lassen. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
FetzeBetreff: Dynamic Lighting Test |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt mal wieder was zu testen ![]() ![]() Dynamische Beleuchtung in Duality, Techdemo gibts hier. Per-Pixel Beleuchtung mit Ambient, Directional, Point und Spot Lights. Einfach mal DualityLauncher.exe starten, ums in Bewegung zu sehen, oder eben den Editor für alle die damit lieber selbst rumspielen wollen. ![]() Interessantes Detail: Um das alles umzusetzen hab ich Duality selbst nicht angefasst - steht zu 100% in Plugin Code. Ist also keine Hexerei seitens des Entwicklers sondern etwas, das auch jeder andere mit Duality hätte basteln können! Vermutlich werde ich Kram wie Beleuchtungstechniken und Co nicht in den Duality Core aufnehmen; ich gehe davon aus, dass nur ein winziger Bruchteil von Spielen tatsächlich darauf zurückgreifen wird. Denen kann die Techdemo hier aber natürlich als Beispiel und Vorlage dienen, für alle anderen bleibt dafür der Core etwas aufgeräumter. Wäre cool wenn ein paar von euch mal testen könntet, ob es denn läuft. Ich bin nicht unbedingt ein Grafikprogrammierungs-Guru und mir nicht im Klaren darüber, ob mein Shader- und Grafikcode hier plattformübergreifend verlässlich arbeitet. ![]() |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, funktioniert hier auf Win Vista, Core2Duo (2x2.13 GHz), Geforce 9600M GT ohne Probleme und absolut flüssig. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
DualityLauncher crasht bei mir.
System: Win7 x64 Professional - SP1 4GB Ram ATI 5770 (neuste Catalyst 11 Treiber) logfile.txt bleibt leer.. Mehr davon kann ich dir nicht zeigen, durch den crash kann ich in der Konsole nicht scrolen ![]() http://www10.pic-upload.de/27....soq83n.jpg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
ozzi789 hat Folgendes geschrieben: DualityLauncher crasht bei mir.
System: Win7 x64 Professional - SP1 4GB Ram ATI 5770 (neuste Catalyst 11 Treiber) logfile.txt bleibt leer.. Mehr davon kann ich dir nicht zeigen, durch den crash kann ich in der Konsole nicht scrolen ![]() http://www10.pic-upload.de/27....soq83n.jpg Soweit ich das überblicken kann hat der Fehler bei dir nichts mit Grafik zu tun sondern mit der Windows 7 User Access Control (UAC) in Verbindung mit den Sicherheitsrichtlinien von DotNet. Folgendes würde mir vielleicht weiterhelfen: 1. Rechtsklick auf DualityLauncher.exe und "Ausführen als Administrator" - gehts dann? 2. Bastle dir eine Datei namens "DualityLauncher.exe.config" die direkt neben "DualityLauncher.exe" liegt, also im selben Ordner. Ihr Inhalt ist: Code: [AUSKLAPPEN] <configuration> <runtime> <loadFromRemoteSources enabled="true" /> </runtime> </configuration> Geht es jetzt? 3. Welche DotNet-Version hast du bei dir installiert? Falls du keine installiert hast, nutzt du die in Windows mitgelieferte Version. In jedem Fall sollte sie unter "Computer" bei "Software installieren / deinstallieren" gelistet sein, da sollte sowas stehen wie "Microsoft .Net Framework 4". Welche Version steht da? 4. Falls es nicht eine 4er-Version ist, könntest du ausprobieren, ob es läuft, wenn du DotNet Version 4 installierst. Die Sache ist, die Sicherheitsrichtlinien haben sich zu Version 4 geändert, was bedeutet dass dasselbe Programm unter der einen Version problemlos läuft aber unter einer anderen Version als Sicherheitsrisiko eingestuft werden könnte. |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Ändert nichts
2. Klappt jetzt perfekt ![]() Grüsse |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht gut aus und läuft flüssig!
System: Win7 Ultimate 64bit mit 4x3.2GHz und GTX460 Musste allerdings DotNetFx4.0 laden, vorher startete es nicht... |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
count-doku hat Folgendes geschrieben: Sieht gut aus und läuft flüssig!
System: Win7 Ultimate 64bit mit 4x3.2GHz und GTX460 Musste allerdings DotNetFx4.0 laden, vorher startete es nicht... Wenn du vom Editor sprichst: Alternativ kann man auch DualityEditor.exe.config löschen und sein Glück versuchen. Effektiv beraubt man den Editor damit seiner DotNet-Versionspräferenz. Empfehle ich nicht, aber wer nur mal schnell reinschauen will, dafür könnte es mit etwas Glück ausreichen. ![]() Insgesamt ist Duality aber schon auf DotNet 4.0 ausgelegt. |
||
![]() |
FetzeBetreff: Feature Explosion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt mal wieder ne Releaseversion mit ein paar neuen Features. Genaugenommen sogar einer ganzen Menge davon ![]() ![]() ![]() ![]() ![]() Freue mich natürlich wie immer über jeden Tester, Feedback, Fragen und Anregungen sind immer gerngesehen ![]() Downloadlinks: --> Asteroids <-- --> Dynamic Lighting <-- (Wen's interessiert, einige der neuen Features hab ich in meinem letzten Blogeintrag ein wenig genauer beschrieben) |
||
![]() |
FetzeBetreff: Intelligentes DragDrop |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, ich hab gerade ein wenig Zeit über, da kann ich ebensogut noch ein paar Worte zum intelligenten DragDrop verlieren - ich denke nach meinem letzten Post hat wohl kaum jemand wirklich eine Ahnung davon, was es eigentlich tut. ![]() Also, worum gehts dabei eigentlich? Das Grundproblem ist eigentlich recht banal: Der Dualitor Workflow basierte von Anfang an zu einem gewissen Teil auf DragDrop, beispielsweise um Verknüpfungen zwischen Ressourcen (Materialien, Texturen, Sounds, etc.) und Komponenten von GameObjects (SpriteRenderer, SoundEmitter, etc.) herzustellen. Ich packe mir im Project View einfach die entsprechende Ressource mit dem Cursor und ziehe sie im Object Inspector auf den jeweiligen Slot der Komponente. Soweit kein Problem. ![]() Ein anderes Anwendungsgebiet von DragDrop ist das Erstellen und instanziieren von Prefabs: Wenn ich als Nutzer ein Prefab aus einem GameObject machen will, greife ich mir das GameObject im Scene View und ziehe es in den Projekt View. GameObjects haben bei den Projektressourcen nichts zu suchen, das weiß der Project View und erstellt deswegen eine Prefab-Ressource, wo das gezogene GameObject dann reingepackt wird. ![]() Will ich aus diesem Prefab jetzt ein GameObject instanziieren, packe ich mir das Prefab im Project View und ziehe es runter in den Scene View oder wahlweise auch den großen Hauptbereich mit der Levelansicht (Camera View). Dort wiederum haben Ressourcen nichts zu suchen, also wird das Prefab kurzerhand ausgepackt und eine Instanz des GameObjects erstellt. ![]() So weit so gut. Auch ohne intelligentes DragDrop war das schonmal ein relativ intuitives Verhalten. Leider funktionierten nicht alle Dinge im Editor so einfach. Nehmen wir an, man wollte (ohne intelligentes DragDrop) ein Sprite-Objekt erstellen, das eine Grafik verwendet, die irgendwo auf der Festplatte herumliegt. Folgendes müsste man dafür tun: 1. DragDrop der Bilddatei in den Project View. Die Grafik wird importiert und eine neue Pixmap-Ressource wird angelegt. 2. Jetzt brauchen wir eine Textur, welche die Grafik verwendet. Rechtsklick auf die Pixmap-Ressource und "Create Texture" im Kontextmenü wählen. 3. Objekte werden aber nicht mit Texturen, sondern mit Materialien gerendert. Also Rechtsklick auf die Texture und "Create Material" im Menü wählen. 4. Jetzt brauchen wir noch das Objekt. Rechtsklick auf eine leere Stelle im Scene view und "Create / GameObject" wählen. 5. Das Objekt benötigt nun Komponenten um ein Sprite darstellen zu können, zunächst einmal eine Position. Rechtsklick auf das neue Objekt und "Create / Components / Transform" wählen. 6. Jetzt noch die Renderer Komponente: "Create / Components / SpriteRenderer". 7. Zu guter letzt müssen wir dem Renderer noch das Material mitgeben. Also die Material-Ressource packen und in den entsprechenden Slot im PropertyGrid ziehen, wenn das Objekt ausgewählt ist. Wenn sich an dieser Stelle jemand denkt "Wtf, so viel Aufwand für ein einfaches Sprite?!", den kann ich beruhigen: In aller Regel passierte es nicht sehr oft dass man wirklich den kompletten Strang an Aktionen ausführen musste. Oft gab es ja bereits ein passendes Material oder das Objekt existierte schon, etc. Trotzdem gab es da natürlich Verbesserungsbedarf und hier kommt intelligentes DragDrop ins Spiel. Spulen wir mal zurück auf Anfang und schauen uns an wie die gesamte Aktion jetzt mit intelligentem DragDrop aussieht: 1. Grafik importieren. Im Prinzip noch genauso wie vorher, da hat sich nix geändert. Siehe Punkt 1 oben. 2. Jetzt noch die neue Pixmap Ressource packen und in Scene- oder Cam View absetzen. 3. Tadaa! Diese simple Aktion veranlasst den Editor dazu, automatisch Textur und Material zu erstellen, konfigurieren und abzuspeichern, ein neues GameObject zu erstellen sowie Transform- und SpriteRenderer Komponente hinzuzufügen. Vollautomatisch und superschnell ![]() Aber kommen wir langsam mal zum intelligenten Teil: Was ist da intern eigentlich gerade passiert? Diese Aktion hardcoded festzulegen wäre doch ein übler Schnitzer im flexiblen Plugin-Design von Engine und Editor. Dem Editor selbst sollte es völlig egal sein, was es für Komponenten und Ressourcen gibt und was man damit tun kann, all dieses "Wissen" kommt erst über entsprechende Plugins hinzu. Doch selbst wenn man diese Aktion hardcoded in ein Plugin packt, wirklich schön oder flexibel ist das nicht. Also auf zur Lösung des Problems: Eine DragDrop-Aktion enthält grundsätzlich erstmal Daten eines bestimmten Typs. Das mögliche Ziel einer DragDrop-Aktion (also beispielsweise Scene- oder Cam View) interessiert dabei gar nicht, was für Daten das genau sind, sondern nur ob man diese in eine Form bringen kann, die das jeweilige Steuerelement verwalten kann. Die Cam View arbeitet z.B. mit GameObjects, da man diese dort drinnen herum schieben kann. Grundsätzlich könnte man der Cam View nun also beibringen wie es andere Datentypen (z.B. Pixmaps) in GameObjects konvertiert, aber was ist dann mit der Scene View? Und allen anderen Steuerelementen? Damit man dasselbe Verhalten nicht allen Steuerelementen einzeln beibringen muss, ist es ratsam, dieses zu zentralisieren. Ein erster Ansatz wäre also, dass Cam View, Scene View und Co beim Feststellen einer DragDrop-Aktion die Rohdaten extrahieren, diese an die "Zentrale" weiterleiten und darum bitten, sie in GameObjects zu konvertieren. Dieses Konzept abstrahierend kam ich auf folgendes: In der Zentrale wird eine Liste von DataConverter-Objekte verwaltet. Jedes dieser Objekte ist in der Lage, einen bestimmten Datentyp in einen anderen Datentyp zu konvertieren. Editor-Plugins können eigene DataConverter definieren und ebenfalls in der Zentrale registrieren. ![]() Ich kann nun der "Zentrale" beliebige Objektdaten rüberschicken und Objekte eines bestimmten Typs zurückverlangen. Was die Zentrale nun tut ist herauszufinden auf welche Weise sich die registrierten DataConverters am effizientesten kombinieren lassen um die Anfrage zu erfüllen. Man kann sich das im Prinzip wie eine Pathfinding-Operation vorstellen. Was also bei der oben vorgestellten DragDrop-Aktion intern passiert ist folgendes: 1. DragDrop erreicht die Cam View. Selbige verlangt GameObjects als Daten und startet "über die Zentrale" eine Konvertierung mit dem Zieltyp "GameObject" 2. Dort wird das Datenpaket geöffnet und festgestellt: Hm, Mist. Keine GameObjects drin. Fragen wir mal rum, ob sich ein Konverter mit Zieltyp "GameObject" findet 3. GameObjectFromPrefab und GameObjectFromComponents bieten sich an. Die Anfrage wird nacheinander an beide weitergeleitet. 4. GameObjectFromPrefab lässt sie nach einigem Pathfinding zurückgehen da der Konverter feststellt dass ihm die zum Arbeiten nötigen Daten fehlen. Es werden keine Prefabs gefunden und es lassen sich auch keine aus den verfügbaren Daten ableiten. 5. Bleibt noch GameObjectFromComponents. Ich überspringe jetzt aber mal die Pathfinding-Details. Die vollständige Konvertierungskette ist: ![]() (Nicht alle existierenden DataConverter angezeigt) Es werden also im Rahmen der Aktion automatisch eine Textur aus der Pixmap erstellt, dann ein Material aus der Textur, dann eine SpriteRenderer-Komponente die das Material nutzt und anschließend ein GameObject welches erst alle "required Components" des SpriteRenderers hinzufügt (Transform) und dann den Renderer selbst. Und da sind wir. Natürlich kann man jetzt sagen "Oh man, so ein Aufwand für so ne Kleinigkeit", aber dieses System hier hat tatsächlich ein paar Vorteile, die anders nur schwer erreichbar wären. Es reagiert zum Beispiel sehr flexibel wenn Nutzer eigene Komponententypen erstellen - einfach einen eigenen Konverter schreiben (Wenige Codezeilen in der Regel) und in der Zentrale registrieren. Und sofort ist der gesamte Editor in der Lage, DragDrop-, Clipboard- und Konvertierungsaktionen mit den Nutzerkomponenten durchzuführen. Ein anderer Vorteil entsteht durch die Arbeitsaufteilung der DataConverter: Eine Konvertierung wird nicht als atomare Aktion begriffen, sondern als Teamwork. Dementsprechend können auch viele DataConverter an einem gemeinsamen Datensatz arbeiten und sich gegenseitig ergänzen. Es ist beispielsweise ohne weiteres Möglich, im Project View ein paar Sounds und eine Textur zu wählen und den ganzen Packen komplett in die Cam View zu ziehen. Das Resultat ist ein GameObject, das neben der SpriteRenderer-Komponente (aus der Textur) auch eine SoundEmitter-Komponente enthält, welche die beiden Sounds als Sound Sources hinzugefügt bekam. Das ist nur dadurch möglich, dass DataConverter "in Teamarbeit" vorgehen. Natürlich gibt es auch DataConverter, die das explizit verhindern. Packt man beispielsweise ein Prefab gemeinsam mit einem Sound, wird das Prefab instanziiert und der Sound ignoriert. Prefabs haben vorrang, da hier angenommen wird dass diese grundsätzlich erstmal in ihrer unbearbeiteten Reinform instanziiert werden sollen. Das ist nirgendwo hardgecodet, sondern steht im DataConverter GameObjectFromPrefab - welcher in der Zentrale bei Bedarf ohne Weiteres überschrieben werden kann. Okay, jetzt hab ich eine ganze Menge Theorie von mir gegeben. Hier zum Abschluss noch ein paar kommentierte Codefragmente: Das hier ist mal so ein DataConverter von Innen, und zwar TextureFromPixmap. Code: [AUSKLAPPEN] public class TextureFromPixmap : DataConverter { public override bool CanConvertFrom(ConvertOperation convert) { return convert.AllowedOperations.HasFlag(ConvertOperation.Operation.Convert) && convert.CanPerform<Pixmap>(); } public override bool Convert(ConvertOperation convert) { bool finishConvertOp = false; List<ContentRef<Pixmap>> dropdata = new List<ContentRef<Pixmap>>(); var matSelectionQuery = convert.Perform<Pixmap>(); if (matSelectionQuery != null) dropdata.AddRange(matSelectionQuery.Ref()); // Generate objects foreach (ContentRef<Pixmap> pixRef in dropdata) { if (convert.IsObjectHandled(pixRef.Res)) continue; if (!pixRef.IsAvailable) continue; Pixmap pix = pixRef.Res; // Find Material matching Texture ContentRef<Texture> texRef = ContentRef<Texture>.Null; if (pixRef.IsDefaultContent) { var defaultContent = ContentProvider.GetAllDefaultContent(); texRef = defaultContent.Where(r => r.Is<Texture>() && (r.Res as Texture).BasePixmap == pix).FirstOrDefault().As<Texture>(); } else { string texPath = pix.FullName + Texture.FileExt; texRef = ContentProvider.RequestContent<Texture>(texPath); if (!texRef.IsAvailable && convert.AllowedOperations.HasFlag(ConvertOperation.Operation.CreateRes)) { // Auto-Generate Texture texRef = Texture.CreateFromPixmap(pix); } } if (!texRef.IsAvailable) continue; convert.AddResult(texRef.Res); finishConvertOp = true; convert.MarkObjectHandled(pixRef.Res); } return finishConvertOp; } } Und so wird er "in der Zentrale" registriert: Code: [AUSKLAPPEN] CorePluginHelper.RegisterDataConverter<Texture>(new DataConverters.TextureFromPixmap());
(Die Zentrale hat noch einige andere Aufgaben - man kann dort z.B. auch Editor-Metadaten für Core-Klassen hinterlegen, z.B. zu nutzende Icons, etc.) Hier eine zum Verständnis gekürzte und editierte Version dessen was die Cam View tut, um an ihre Daten zu kommen: Code: [AUSKLAPPEN] private void LocalGLControl_DragDrop(object sender, DragEventArgs e) { DataObject data = e.Data as DataObject; ConvertOperation convert = new ConvertOperation(data, ConvertOperation.Operation.All); if (convert.CanPerform<GameObject>()) { var dragObjQuery = convert.Perform<GameObject>(); List<GameObject> dragObj = dragObjQuery.ToList(); // .. snip .. } } Mithilfe der ConvertOperation-Klasse sind es im Prinzip nur ein paar Zeilen, um jeden beliebigen Objekttyp anzufordern. Sie kapselt auch die ganzen Zugriffe auf die "Zentrale". So. Hoffe, das war so halbwegs informativ ![]() |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beide Echsen .. äh Exen funktionieren ohne Probleme ![]() Ich habe nicht alles gelesen, aber hört sich interessant an & der Editor macht einen sehr professionellen eindruck! |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin gerade leider ziemlich beschäftigt mit Studienkram und langsam stapelt sich eine Menge Zeug auf meiner ToDo-List. Zeit für eine kleine Spielerei war aber trotzdem, deswegen kann ich euch jetzt viel Spaß mit Tetris wünschen ![]() ![]() Feedback und Highscore-Vergleiche sind willkommen ![]() (Danke für die Musikuntermalung an SunandWeather) |
||
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab mich in letzter Zeit nochmal ausgiebig mit der Integration der Farseer-Physikengine befasst. Neu sind unter anderem 14 Joint-Typen und eine Physik-Sandbox in der man das ganze mal in Aktion bewundern kann. ![]() ![]() ![]() ![]() ![]() ![]() ![]() Das ganze kann hier heruntergeladen werden ![]() Edit: Für Interessierte gibts jetzt auch eine Infoseite zu Duality, wo das Wesentliche nochmal kurz zusammengefasst ist. Falls sich jemand überlegt Duality mal auszuprobieren ist das ein guter Startpunkt ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group