Frage

Vor mehr als 5 Jahren habe ich mit DirectSound und Direct3D gespielt und fand es wirklich aufregend, obwohl es viel Zeit brauchte, um mit C ++ gute Ergebnisse zu erzielen. Ich war damals ein Student. Jetzt habe ich hauptsächlich Erfahrung in der Unternehmensentwicklung in C# und PHP, und ich mache es für das Leben. Es gibt wirklich keine Chance, mit ernsthafter Spieleentwicklung in unserem Land Geld zu verdienen. Jeden Tag finde ich immer mehr, dass ich etwas vermisse. Also entschied ich mich, jeden Tag eine Stunde zu verbringen, um zum Spaß zu programmieren.

Meine Idee ist es also, eine Weltsimulation aufzubauen. Ich möchte mit etwas Einfachem beginnen - einige menschliche Kreaturen, die ihr Leben leben - wie Sims 3, aber viel einfacher, nur grundlegende Anforderungen, grundlegende Animationen, minimale grafische Assets - ich denke, es wird keine Stadt, sondern nur eine Großes Haus für den Anfang. Die Idee ist, eine Art Serveranwendung zu haben, die die Weltdaten in der MySQL -Datenbank und einigen Clientanwendungen speichert - körperlose KI -Bots, die die Bewegung und einige Interaktionen mit der Welt und anderen simulieren. Aber ohne 3D würde es keinen Spaß machen. Es gibt also auch 3D -Kunden - ich kann in diese virtuelle Welt eintreten und die KI -Bots leben sehen. Wenn der Bot in sichtbaren Bereich eintritt, wird er zu Material - lädt ein Netz und Animationen, sodass ich es sehen kann. Wenn ich gehe, verlieren die Bots wieder ihre 3D -Mesh -Körper, aber ihr virtuelles Leben wird immer noch fortgesetzt.

Mit der Zeit hoffe ich, es wie ein erweiterbares skriptierbares Sandbox zu machen, um mit verschiedenen KI -Algorithmen zu experimentieren und so weiter. Aber ich soll nicht ein ausgewachsenes MMORPG erstellen: D.

Ich habe nach vielen möglichen Dingen gesucht, die ich brauchen würde (kostenlos und Open Source), und jetzt muss ich eine Wahl treffen:

  • Ogre3d + enet (oder raknet). Altes gutes C ++. Aber wird es mich nicht so sehr verlangsamen, dass ich keinen Spaß mehr habe?

  • Kristalle. Formell keine Spieleimaschinenmotor, sondern sehr nahe daran. C ++ wieder.

  • Mogre (OGRE3D -Wrapper für .NET) + Lidgren (Networking -Bibliothek, die bereits in einigen Spielprojekten verwendet wird). Gut - ich mag C#, es ist gut für schnelles Programmieren und kann auch zum Skripten verwendet werden.

  • Xna scheint nur ein Rahmen zu sein, keine Motor, also habe ich wirklich Zweifel, sollte ich mir das XNA Game Studio ansehen :(

  • Panda3d - Vollspiel -Engine mit positivem Feedback. Ich mag die Idee sehr, das gesamte Toolset in einem Paket zu haben. Es gibt gute Bewertungen als Anfänger-freundlicher Motor ... wenn Sie Python kennen. Auf der C ++-Seite hat Panda3D fast nicht vorhanden. Ich habe 0 Erfahrung mit Python, aber ich habe gehört, dass es leicht zu lernen ist. Und wenn es Spaß macht und herausfordernd wird, würde ich wohl von Erfahrung in einer weiteren Programmiersprache profitieren.

Welche davon würden Sie vorschlagen, nicht aufgrund erweiterter Funktionen oder guter Plattformunterstützung, sondern hauptsächlich für unterhaltsame, einfache Workflow und Erweiterbarkeit, und so kann ich alle Komponenten erstellen und integrieren, die ich benötige - den Server mit der Datenbank, AI -Bots und einem 3D Client -Anwendung?

War es hilfreich?

Lösung

Wenn Sie Python mögen, gibt es Bindungen für Oger. Kasse Python-ogre. Ich habe es ein bisschen benutzt und es schien stabil genug, um verwendet zu werden. Sie werden jedoch auf den gelegentlichen Fehler stoßen, da die Benutzerbasis nicht so groß ist.

Ich habe mehr Erfahrung mit Plain C ++ Oger, was ich gerne viel benutze. Ich glaube nicht, dass es dich so sehr verlangsamen wird. Es sieht so aus, als könnte Ihr Projekt auf ein ziemlich großes Niveau skalieren, und Sie werden dafür viel Leistung benötigen. In diesem Fall ist C ++ nie eine schlechte Wahl.

Wie auch immer, sobald der Motor fertig ist, dreht sich so ziemlich nur um Scripting. Und das könnten Sie in einer hohen Sprache tun, wenn Sie wollten.

Andere Tipps

Ich habe nur XNA verwendet, deshalb kann ich Ihnen nicht wirklich einen guten Vergleich mit den anderen geben. Ich werde sagen, dass xna nur ein Rahmen ist, während es nur ein Rahmen ist, Torquex 3d ist ein Motor. Sie erhalten Zugriff auf die Binärdateien von Torquex 2D und 3D -Motor, wenn Sie sich für XNA (100 US -Dollar pro Jahr) entwickeln.

Ich habe nicht mit dem 3D -Motor gearbeitet, aber ich habe den 2D -Motor verwendet. Ich werde sagen, dass die Dokumentation über die API ein wenig spärlich sein kann, aber sie haben einige wirklich gute Einführungs -Tutorials und ein ziemlich hilfreiches und aktives Forum für Fragen, die nicht von den Tutorials beantwortet werden.

Ihre Erfahrung mit C# wird offensichtlich sehr praktisch sein. Sie müssen sich jedoch an Windows -Entwicklung halten, da Sie keinen Zugriff auf den Netzwerkstapel (oder die Datenbank) in der Xbox 360 haben.

Nachdem ich die Tutorials durchgearbeitet und mich an den Stil des Drehmoments gewöhnt hatte, fand ich es ziemlich lustig, mit ihm zu arbeiten. Es ist sehr einfach, Objekte/Verhaltensweisen hinzuzufügen. Die Tonunterstützung wurde mit einigen der neuesten Veröffentlichungen des XNA -Frameworks verbessert und wirklich einfach gemacht. Es hat einen guten Redakteur für 2D, und ich denke, der 3D -Editor ist auch anständig (ich habe es nicht wirklich versucht), damit Sie mit dem Erstellen von Levels beginnen können. Ich denke, es fehlt in der Netzwerk-/Datenbankabteilung, Sie müssten das Standard -.NET -Zeug verwenden oder andere Bibliotheken einbringen, um mit ihnen zu arbeiten.

Ich denke, es wäre Ihre Zeit wert, sich es trotzdem anzusehen und es mit den anderen zu vergleichen. Ich glaube, Sie können eine kostenlose (30 -Tage-) Testversion auch ohne Anmelden für XNA herunterladen, wenn Sie damit herumspielen möchten. Viel Glück!

Panda3d scheint vielversprechend zu sein, da es eine Möglichkeit gibt, Maschen zur Laufzeit zu ändern (diese Funktion fehlt, fehlerhaft oder auf andere Weise in vielen 3D-Motoren schwer zu verwenden). Dies wäre das, was Sie für interaktive clientseitige Netzänderungen benötigen, die von einem gemeinsamen Server aufgezeichnet werden . Stellen Sie in Ihrer Datenbank sicher, dass Sie einen Zeitstempel für Änderungen angeben, damit Sie geeignete Abfragen ausführen können, um Patches für Clients zu generieren, um Update -Mesh -Informationen zu erhalten, sobald sie geändert werden.

Mit InnoDB können Sie Tabellen so etwas wie mein SQL machen, aber dies gibt die Idee:

create table `vertex` (
  `id` bigint(15) not null auto_increment,
  `when` timestamp default now() not null,
  `x` number not null,
  `y` number not null,
  `z` number not null,
  `cR` number default 0.0 not null,
  `cG` number default 0.0 not null,
  `cB` number default 0.0 not null,
  `cA` number default 1.0 not null,
  `u` number default 0.5 not null,
  `v` number default 0.5 not null
) primary key (id) ENGINE=InnoDB;

create table triangles (
  `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `when` timestamp default now() not null
) primary key (p1,p2,p3) ENGINE=InnoDB;

ID ist eine Vertex -ID, wenn der Zeitstempel ermöglicht, Update -Patches x, y, z zu erstellen, ist der 3D -Vertex -Punkt -CR, CG, CB, CA IS RGBA Vertex Color U, V ist die Vertex -Texturkoordinate P1, p2, p3 siehe die Scheitelpunkte auf die Scheitelpunkte In der Vertex -Tabelle zur Bildung von Dreiecken, wie aus diesen ausländischen Schlüsselreferenzen angegeben, können wir undefined Scheitelpunkte (dh konsistenz) Probleme verhindern, damit sie dies auch verwenden können. Wenn es akzeptabel ist, alle Dreiecke mit einem gelöschten Scheitelpunkt in Ihrer Situation zu entfernen. Änderung "Einschränkend" auf "Kaskade" (Einschränkung macht es zu einem Fehler, einen Scheitelpunkt mit Dreiecken zu löschen, die es verwenden).

Was den Bot Mesh -Algorithmus betrifft, so implementieren Sie im Grunde genommen eine LOD -Keule für nicht im Sichtweise von Bots. Viele Motoren können dies bereits für Sie tun. Zum Beispiel können alle Skinn-/Animationsnetze des Bots Kinder zum äußeren Objekt des Bots in Panda3d gemacht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top