Statusupdate 2

Mal wieder ein paar Dinge, an denen ich grade so arbeite:

Zum einen ist da YaME: Yet another Minecraft Engine. Hier ein kleines Video:

Ich wollte mal etwas in 3D mit XNA machen, und habe aus Spaß dieses Projekt angefangen. Momentan gibt es schon endlose Landschaften (zumindest bis der Speicher voll ist ;)), und die Framerate ist noch akzeptabel. Ich werde wohl zumindest noch bessere Grafiken und etwas Physik einbauen, zusammen mit einem besseren Renderer (Octrees und Occlusion Culling wäre super)

Dann bin ich grade dabei das LuaInterface um die Fähigkeiten der DLR zu erweitern. Microsoft hat mit .NET 4 eine bessere Interoperabilität mit Scriptsprachen eingebaut: Mit dem Schlüsselwort „dynamic“ kann man Objekte definieren, die z.B deren genaues „Aussehen“ erst zu Laufzeit festgelegt wird. Außerdem ist es damit möglich viele expliziete Konvertierungen wegzulassen. Das passt natürlich wunderbar zu Lua, und dem LuaInterface, mit dem man schon jetzt sehr elegant aus .NET auf Lua zugreifen kann. Kleines Code-Beispiel gefällig?

Weiterlesen

Würfel mit nur 12 Vertices texturieren

Hat mich grade etwas nachdenken gekostet:

Wie muss man die Texturkoordinaten eines Würfels setzen, damit auf allen Seiten die gleiche Textur zu sehen ist?

Mit nur acht Vertices geht es nicht (für jede Ecke einer), aber mit 12 geht es:

Man verzeihe meine Paint-Künste… Die hinteren Vertices müssen doppelt vorhanden sein, die obere und untere Seite wird dann mit diesen Vertices generiert. Die Farben geben die Texturkoordinaten an, die Zahlen an den Ecken sind die Nummern der Vertices. Weil ich ja so nett bin, gibt es die passenden Indices jetzt auch noch dazu:

Weiterlesen

Neues Projekt: XNA FAQ

Fast hätte ich vergessen, darüber zu bloggen: Ich habe einen neue Website gestartet, das XNA FAQ. Ich zitiere mal von der Startseite:

Nach dem im XNA.mag immer mal wieder die Frage nach einer FAQ Sammlung laut wurde, da die gleichen Fragen immer wieder gestellt werden, habe ich mich jetzt entschieden, einfach mal einen Versuch zu starten, und habe diese Website gestartet.

Momentan ist hier noch nicht besonders viel zu lesen, was auch daran liegt, dass ich noch alleine bin. Wer also hier mithelfen will, kann mich gerne fragen (s. Kontakt).

Ich hoffe mit diesem Projekt eine Sammlung von relativ kurzen Antworten zu bieten, die häufig gestellte Fragen kurz beantworten, oder, sollte dies nicht möglich sein, einen Anhaltspunkt bieten in welche Richtung man die Lösung findet. Das ist aber auch nur ein grobes Konzept, das ich auch gerne nach Bedarf anpassen werde.

Weiterlesen

Der tKoD Map Editor

Jetzt sind ja Ferien, und da hat man wenigstens mal Zeit an seinem Hobbyprojekt weiterzuarbeiten 😉 Ich habe die Zeit dazu genutzt dem Editor zu meinem Spiel mal ein paar neue Features zu verpassen:

Es gibt einen Scripteditor der auf ScintillaNet basiert, und den Inhalt auch an einen externen Editor senden kann. Dazu gibt es eine ComboBox für die Hintergrundmusik und ein DataGridView, das an ein Dictionary gebunden ist, wodurch man eigene Schlüssel-Wert-Paare festlegen kann.

Das ganze kann auch in eine Datei geschrieben werden und wird auch korrekt wieder ausgelesen.

Weiterlesen

XNA 4: Probleme mit WinForms

Nachdem mein anderer Beitrag über Probleme und Lösungen bei XNA 4.0 Upgrade ja scheinbar ein paar Leuten geholfen hat, gibt es jetzt das gleiche nochmal für XNA in Kombination mit Windows Forms, wie es ja oft bei Editoren zu finden ist. Ich baue meinen Editor auf diesem soliden Gerüst auf, und wollte jetzt auch hier langsam mal auf XNA 4 wechseln. Was gab es also für Probleme?

Die Klasse Color befindet sich jetzt nicht mehr unter XNA.Framework.Graphics, sonder nur noch unter XNA.Framework. Das für u.U. zu Problemen mit den usings, da es ja auch Windows.Forms.Color gibt. Hier ist der Trick, das man bei using auch einen alternative Namen angeben kann:

Weiterlesen

XNA 4.0 in Deutsch & Performance Tools

Gleich zwei super Neuigkeiten heute:

  1. XNA gibt es jetzt auch auf Deutsch! Das betrifft auch die komplette Dokumentation, also auch die IntelliSense Tipps. Eine super Sachen, finde ich, nicht weil ich Probleme mit der englischen Version hatte, sondern, weil es immer gestört hat, wenn im deutschen VisualStudio an und an englische Tooltipps erschienen
  2. Es gibt von Microsoft ein „Performance Utility„. Das ist eine Overlaykomponente, mit der die Update und Draw Zeit angezeigt wird, eine FPS Anzeige, ein Overlay, dass einfach beliebige Werte anzeigt, und eine Ingame-Console.

Besonders freut mich die Console (wenn sie gut ist ;)), denn nachdem meine „alte“ Console, nicht mehr für XNA 4.0 geupdatet wurde, musste ich mir was neues suchen. Für gewöhnlich sind die Sachen von Microsoft ja ziemlich gut (weil sie sie selber brauchen :D), evtl. bleibt mir da noch Arbeit erspart. (Know when to be lazy)

Weiterlesen

Hürden für das Upgrade auf XNA 4.0 und wie man sie umgeht

Nachdem am 16. September ja nun endlich XNA 4.0 erschienen ist, habe ich natürlich auch meine Projekt auf die neue Version aktualisiert. Das ganze hat erstaunlich wenig Probleme gemacht, und nur eine Sachen bereit mir ernsthafte Probleme.

Alte XACT Dateien können nicht gelesen werden. Das Problem lässt sich sehr einfach beheben: Mit dem neuen Game Studio kommt auch ein neues XACT (auch Version 3.0, aber vom Februar 2010). Die alte Datei damit öffnen, Hinweis abnicken und wieder speichern, Problem behoben.

DisplayMode.RefreshRate fehlt. Eines der Probleme, die ich nicht wirklich beheben konnte. Um das Ruckeln von Animationen zu beheben hatte ich die FPS Rate an die Wiederhohlrate des Monitors angepasst. Da die entsprechende Eigenschaft jetzt einfach fehlt, kann ich das so einfach nicht mehr machen.

Weiterlesen

Ein neues Tutorial!

Nach dem ganzen Ärger mit unaxus und der Freude über Visual Studio 2010 war ich mal wieder produktiv: Ich habe eine neues Tutorial geschrieben!

Nicht hier im Blog, sondern im xna.mag. Hier ist der Link:

http://www.xnamag.de/forum/viewtopic.php?p=27655

Dort wird erklärt, wie man in sein XNA Spiel einen Creditsscreen einbaut. Und jetzt ratet mal, was tKoD grade bekommen hat? Richtig einen Creditsscreen! Evtl. werde ich davon auch noch mal ein Video machen…

XNA 4.0 CTP verfügbar

Vor einigen Tagen hat Microsoft eine neue Version von XNA öffentlich gemacht: XNA 4.0! Leider nur eine CTP Version, also quasi eine Beta. Konkret bedeutet das, dass man nur die Windows Phone Features verwenden kann. (Auf allen Plattformen).

Hier mal eine kleine Liste an Änderungen, die mit XNA 4.0 kommen werden:

  1. Kein Zune Support mehr. Legt nahe, das der Zune Nachfolger mit Windows Phone 7 laufen wird (nur ohne Telefon)
  2. Nur noch zwei Profile: Reach und HiDef. Reach kann jedes XNA Gerät. und nur manche (XBox und gute PCs) könne HiDef. Macht es zwar einfacher, das Spiel auf dem PC an die Leistung des Geräts an zu passen, aber ich finde, die Einteilung in nur zwei Profile ist etwas heftig, finde ich. tKoD z.B. braucht HiDef, weil Reach keine eigenen Shader zulässt… (aber die wollte ich sowieso de aktivierbar machen) Mehr Infos gibst hier
  3. StorageContainer.TitleLocation wird mit einer OpenStram API ersetzt (?)
  4. Statt der RenderStates gibt es eine neue State Object API
  5. Vormultipliertes Alpha ist jetzt Standart
  6. SpriteBatch kann jetzt einfacher mit eigenen RenderStates uns eigene Shadern benutzt werden.
  7. SpriteBatch Text kann einfacher ein einer 3D Welt untergebracht werden.
  8. VertexBuffer sind jetzt streng typisiert.
  9. Die VertexDecalration wird jetzt aus dem VertexBuffer entnommen.
  10. VertexBuffer Größen werden jetzt nicht mehr in Bytees angegeben.
  11. GraphicsDevice.Vertices wurde mit einer neues SetVertices API ersetzt.
  12. Jedes RenderTarget hat jetzt einen eigenen DepthBuffer, kein DepthStencilBuffer Type mehr. (?)
  13. RenderTarget2D ist jetzt von Texture2D abgeleitet. (kein GetTexture mehr) (!)
  14. SetRenderTarget setzt jetzt alle RenderTarget.s (?)
  15. Effect.Begin & End wurden durch Apply ersetzt.
  16. Kein LowLevel Zugriff mehr auf die Vertex und PixelShader mehr (nur noch als Effect-Instanz).
  17. EffectPool (!) StateBlock (?), GammaRamp (?) und ClipPlane wurden entfernt.
  18. TriangleFans wurden entfernt.
  19. PointSprites wurden entfernt (!)
  20. Der ColorType speichert jetzt intern RGBA statt BGRA.

Diese Liste basiert zum Großteil auf der hier.

Weiterlesen

100 FPS mehr durch Tilemap Clipping

Da ich momentan noch auf Bug-Jagd durch die Tiefen von The Kingdom of Darkness bin, habe ich heute mal zu Abwechslung das Tilemap Clipping eingebaut. Durch diese Technik werden einfach nicht alle Tiles gezeichnet, sondern nur die, die auch grade auf dem Bildschirm zu sehen sind.

Der Performancegewinn hängt von der Größe der Karte ab, bei mir hat es 100 FPS gebracht. Das ist weniger als es erstmal klingt, den ob ein Spiel nun mit  300 oder 400 Frames pro Sekunde läuft kann man nicht merken… Trotzdem hatte ich schon lange vor diese Technik einzubauen. Die Änerung ist eigentlich auch nur sehr klein:

for (int i = (int)Camera.CameraPosition.X / 32; i < Math.Min(((int)Camera.CameraPosition.X / 32) + 26, Tiles.Count); i++)
 {
 // Alle Spalten durchlaufen
 for (int j = (int)Camera.CameraPosition.Y / 32; j < Math.Min(((int)Camera.CameraPosition.Y / 32) + 20, Tiles[0].Count); j++)
 {

Weiterlesen