Suche: Vektorgraphik Engine

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Hallo zusammen :-)
Vllt erinnern sich noch ein paar an meinen ASCII-Engine Thread. Die Idee für ein RPG ist die gleiche geblieben nur wachsen die Ansprüche etwas...

Ich stelle mir mitlerweile eine 2D Grafik vor die als Spielfiguren zB nur einen Kreis darstellt (für den Held beispielsweise) und weitere Symbole (zB Dreieck für Gegner usw...) sowie Linien für Wände.

Ich denke so etwas müsste relativ leicht mit Pygame zu erreichen sein. Doch möchte ich keine direkte "Von-oben-drauf-Sicht" (Vogelperspektive) sondern eher eine 3rd-Person Ansicht. Das darf man sich in etwa so vorstellen:

Bild

Da es den Sourcecode dazu [1] unter der GPL gibt hab ich Ihn mir mal angesehen. Aber der Code ist überhaupt nicht dokumentiert und sehr unübersichtlich (für Pythoncode). Noch dazu ist der Code so geschrieben das er nicht wiederbenutzbar ist. Natürlich könnte man das irgendwie extrahieren und umschreiben, allerdings fehlt mir dazu im moment die Motivation. Geschrieben wurde das ganze mit pygame. Vllt ist das ein Grund das ich den Code nur schwer überblicke, da ich noch nicht viel mit pygame gemacht habe. Eine sehr schicke Lösung (die ich trotz dem Wirrwar rausfinden konnte) hat der Autor für das Track-/Autodesign gewählt: Er importiert die Daten aus .svg Dateien.

Meine Frage ist also, ob es etwas vergleichbares bereits gibt.
Dokumentation wäre natürlich ein Schmankerl, das ich nicht verachten würde. ;-)

Beim googlen und durchsehen des pygame repositories bin ich noch auf einige andere Sachen gestoßen. Dazu hier schnell was:

Rabbyt [2] scheint sehr mächtig und schnell zu sein. Eigentlich so etwas das ich brauche. Jedoch mag es bei mir einfach nicht funktionieren :-(

Spyre [3] ist, so wie es scheint, eher eine 3D Engine, aber vllt liese sich das ja trotzdem für meine Zwecke nutzen. Jedoch hab ich das gleich Problem wie bei Rabbyt das es nicht laufen mag. Wie bei Rabbyt beenden sich die Beispiel-Applikationen sofort von selbst, aber ohne Fehlermeldung anzuzeigen. Ich vermute das es an meiner pygame installation liegt, da VROOM!!! funktioniert (welches eine eigene pygame version mitbringt).

Der Fehler mit Rabbyt und Spyre lies sich mithilfe eines Debuggers immer dort lokalisieren wo ein pygame_init, bzw rabbyt_init oder so ähnlich aufgerufen wird.
Mein System ist ein Kubuntu 7.10. Die pygame Version kommt direkt aus dem Standard Repository.
Würd mich freuen wenn Ihr eine Idee hättet, was ich als Engine verwenden kann. Bin froh über jeden Post :-)
Danke, phxx

vroom: http://www.stoicmonkey.com/2007/01/vroom/
[1] vroom GPL: http://www.stoicmonkey.com/2007/01/gpl-vroom-for-linux/

[2] Rabbyt: http://matthewmarshall.org/projects/rabbyt/docs/rabbyt/

[3] Spyre: http://pduel.sourceforge.net/spyre/
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ohne deinen Links gefolgt zu sein denke ich bei Vektorgrafik sofort an SVG und würde sagen, mit Webkit oder Mozilla hast du deine Vektorgrafik-Engine gefunden und auch gleich einen bequemen Weg, wie du die Software später deployen kannst: Das Web.

Suns Livery-Projekt unter der Führung von Altmeister Dan Ingalls zeigt, was man mit JavaScript und SVG machen kann.

Serverseitig SVG generieren per Python, genug JavaScript, um das Spiel zu animieren und mit der Serverseite per Ajax/Comet zu sprechen, Spiellogik auf dem Server, das könnte doch für ein Rollenspiel funktionieren.

Stefan

PS: Was für ein RPG eigentlich? Eher klassisch nach Pen&Paper-Vorlage oder neumodisch à la WoW? Oder klassisch in der Tradition von Bard's Tale, Baldur's Gate usw.?
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Der Ansatz den Du vorschlägst klingt extrem interessant. Jedoch weiß ich nicht so recht ob es so am Sinnvollsten ist. Ich plane das ganz, zumindest auf sehr lange Sicht gesehen als MMORPG, also Multiplayer von der feinen Sorte. Und ich denke da ist der Ansatz von SVG in Webseiten nicht allzu verwendbar. Gerade wenn man z.B. den "Held" bewegt und die SVGs dazu auf dem Server berechnet werden so wird das mit Sicherheit kein ruckelfreies Bild abgeben. Rein Clientseitig (im Browser) die Engine zu halten gefällt mir auch nicht. Javascript ist nicht gerade schön und auch nicht bekannt dafür in allen Browsern gleich zu funktionieren.

Trotzdem schöner Gedanke. Ich lass es mir nochmal durch den Kopf gehen und versuche mir einen Ansatz dafür auszudenken wie man das am besten modellieren könnte.

Zum Inhalt: Es soll möglichst Story- bzw. Spieler-Spieler Interaktionslastig sein. Von der Spielwelt her evtl. so begehbar wie WoW. Kampfsystem weiß ich noch nicht. Echtzeitbasiert ist sicher einfacher, von der Logik her, da sich ja alle gleichzeitig bewegen können (ich meine alle Spieler die auf dem Server eingeloggt sind, vorallem die, die ja nicht in den Kampf verwickelt sind).
BlackJack

Wenn Story und Interaktion der Spieler im Vordergrund stehen sollen, würde ich empfehlen die Grafik hinten an zu stellen und Spiellogik und GUI sauber zu trennen. Dann kannst Du erst einmal mit einer simplen GUI das Spiel aufbauen und später auf aufwändigere Grafik umsteigen.

Ein kleines studentisch organisiertes Spiele-Seminar hatte jedenfalls bei uns an der Uni mal unter anderem die Erkenntnis zu Tage gefördert, dass man sich bei Spielen oft übernimmt und zu viel auf einmal in Angriff nimmt. Die Projekte, die nicht irgendwann abgebrochen wurden, sind fast alle so vorgegangen, dass sie möglichst schnell etwas ganz Einfaches, aber Spielbares implementiert haben, und dann nach und nach die ganzen Features hinzugefügt haben, die geplant waren.

Solange Du also noch keinen Spieler hast, der auf einer, sagen wir mal ASCII-Karte herumlaufen kann, solltest Du noch keine Energie in irgendwelche 3D-Darstellungen investieren. Wenn Du keine *richtig* aufwändige 3D-Welt erstellen kannst, wird das meiste sowieso von der Phantasie der Spieler erledigt. Da ist weniger oft mehr. Die Story und ein ausgewogenes Kampf-/Belohnungssystem sind bei solchen Spielen letztendlich wichtiger als die Grafik. Die beste Grafik nützt nichts, wenn der Spieler kein richtiges Ziel hat, stumpf hunderte schwache Gegner nieder metzelt um dann auf einen zu treffen, der ihn mit einem Schlag weg putzt.
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

BlackJack hat geschrieben:Wenn Du keine *richtig* aufwändige 3D-Welt erstellen kannst, wird das meiste sowieso von der Phantasie der Spieler erledigt. Da ist weniger oft mehr.
Ich geb Dir sehr gerne recht, dass weniger meist mehr ist. Deshalb lagen die ursprünglichen Planungen ja auch bei einer ASCII-Art Implementierung. Die neue Idee ist genau so schlicht, jedoch nicht so oft anzutreffen wie die ASCII-Variante. Da ich keinen Plan von 3D-Modelling und Texturen etc habe wollte ich es eben relativ "einfach" gestalten mit diesem Vektorlook. Und es scheint ja (wie in VROOM) mit relativ wenig aufwand zu funktionieren, nur wurde es da nicht sehr gut/gekapselt implementiert.

Ich würde auch gerne schnellstmöglich zu einer ersten TechPreview kommen. So bleibt einfach die Motivation größer. Und sobald die Grundlagen stehen und man etwas Handfestes (sofern das bei Software zutrifft ;-)) sehen kann, bekommt man auch evtl. Hilfe aus dem Opensourcelager.

Danke für Deine Meinung.
phxx
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Bzgl. SVG denke ich an (Py)Cairo. Die Ergebnisse sehen auf jeden Fall sehr sauber aus, allerdings weiß ich nicht, ob das auch 3D kann.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

BlackJack hat geschrieben:Die beste Grafik nützt nichts, wenn der Spieler kein richtiges Ziel hat, stumpf hunderte schwache Gegner nieder metzelt um dann auf einen zu treffen, der ihn mit einem Schlag weg putzt.
Dan hast du aber noch nie "Serious Sam" mit acht Leuten im LAN gespielt :D
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

EyDu hat geschrieben:Dan hast du aber noch nie "Serious Sam" mit acht Leuten im LAN gespielt :D
Das ist allerdings auch kein MMORPG.
Ich persönlich fände ein MORPG, also in etwa so viele Spieler (jedenfalls << 1000), die sich entweder treffen oder sonstwie kennen, interessanter. Oder eine freie und ausgereifte Engine à la Neverwinter Nights, für die man sich dann selbst Welten stricken kann.
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mkallas: Genau so ein MMORPG soll es werden. Zuerst werden wir (also ich und ein tapferer Mitstreiter von Freund) wohl eine kleine TechPreview erstellen, rein mit Singleplayer. Aber wir planen das auf längere Sicht (die Entwicklung wird garantiert etwas dauern ;-)) tatsächlich so.
Die Idee mit dieser "Neverwinter Night's" Sache gefällt mir sehr gut. Habe NN zwar nie selber gespielt aber über den interessanten Modi gelesen. Das wäre sicher ein schöner Aspekt.
Y0Gi hat geschrieben:Bzgl. SVG denke ich an (Py)Cairo. Die Ergebnisse sehen auf jeden Fall sehr sauber aus, allerdings weiß ich nicht, ob das auch 3D kann.
Ich denke Cairo ist eher etwas für Benutzeroberflächen als für Grafikengines. Allerdings wäre es wohl benutzbar, wenn es Allgorithmus dafür gibt, SVG Daten (oder generell Vektoren) in die räumliche Ebene hinein zu kippen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Phxx, was du vorhast, klingt sehr komplex und aufwendig und ich denke nicht, dass Grafik das einzig schwierige Thema ist.

Ich habe selbst noch nie ein richtiges Spiel - geschweige denn ein MMORPG - gebaut, somit sind die folgenden Überlegungen eher theoretisch.

Ihr braucht aber erstmal ein funktionierendes Regelsystem für das Spiel. Vielleicht kann man sich die D20-Regeln schnappen, die unter eine GPL-artigen Lizenz eingesetzt werden könnten, doch ich persönlich finde alles, wofür D20 und D&D stehen, nur schlecht und würde da weitersuchen :) Kein echter Rollenspieler wird nicht schon einmal versucht haben, sich seine eigenen Regeln zu erfinden - daher weiß ich, dass dies kein einfaches Unterfangen ist. Hand in Hand mit den Regeln geht das Konzept für die Welt - der Hintergrund: Länder, Kulturen, Rassen, Geschichte. Gibt es Magie? Wie funktioniert diese dann? Gibt es Götter? Haben sich Macht auf der Welt? WoW baut hier ja nicht nur auf den üblichen Klischees auf, sondern auch auf das durch die Warcraft-Reihe geschaffene Konzept. Auch Gildwars hat eine reiche Hintergrundgeschichte. Neverwinternights sowieso, baut es doch auf dem Pen&Paper-Rollenspiel-Hintergrund der vergessenen Königreiche auf.

Dann soll es ein "massive multiplayer online" RPG sein. Online heißt, ihr müsst lernen, wie man einen Server stabil betreibt und wie die Spielclients sicher mit dem Server kommunizieren. Oder ihr müsst eine skalierbare, sichere P2P-Architektur entwerfen, was aber meines Wissens auch noch keinem der kommerziellen Anbieter gelungen ist. Gibt es mehrere Spieler gleichzeitig in einem Spiel, müssen deren Aktionen koordiniert werden - auf einmal sind da alle Probleme nebenläufiger Programmierung. Der Anspruch "massive" ist zudem, dass da viele Leute mitspielen können. Bei WoW schaffen sie es glaube ich, ein paar Tausend Spieler auf einer Welt (Shard oder wie das heißt) zu koordinieren, wobei ich nicht sicher bin, ob die sich alle im selben Segment der Welt aufhalten können. Doch zumindest soll es Dungeons geben, in die man mit knapp 100 Leute gehen kann, sodass ich vermute, zumindest 100 gilt als "massive". Bei GW ist glaube ich früher Schluss, vielleicht benutzen die auch ein P2P-Konzept, um den eigentlichen Server zu entlasten. Eve Online ist stolz darauf, alle Spieler in nur einer Welt abzuhandeln, doch ich glaube, denen würde auch alles zusammenbrechen, wenn zu viele Spieler am selben Punkt ständen. Außerdem ist EO klein im Vergleich zu GW, was wiederum klein ist im Vergleich zu WoW.

Ihr müsst wahrscheinlich auch zusehen, dass Clients in dem Spiel nicht schummeln können. Ein Weg wäre, alle Änderungen nur auf dem Server vorzunehmen und die Client - ähnlich wie Browser, daher erwähnte ich diese schon vorher - nur zur Anzeige zu benutzen. Dieser Ansatz steht aber klar im Gegensatz zur Skalierbarkeit.

Technisch gesehen ist so ein Spiel ein großer Chat. So würde ich wohl ansetzen. Man baue ein effizientes Chat-Protokoll und tausche da nicht nur das "Blabla" der Spieler aus, sondern auch Statusinformationen für den Client und Anweisungen für den Server. Die große Frage ist jetzt, welche.

Wartet ein Client naiv nach einer Anweisung für den Server auf die Bestätigung durch eine Statusänderung, wird man wahrscheinlich recht schnell einen "lag" spüren - alles ruckelt und zuckelt. Hier muss man also irgendwie tricksen und dem Client ebenfalls genug Weltwissen um die Regeln geben, dass er Anweisungen selbstständig ausführen und ggf. zurücknehmen kann, wenn sie wider erwarten doch nicht erfolgreich umgesetzt werden können. Außerdem sollte man wohl versuchen, TCP/IP-Pakete optimal zu füllen und ihre Anzahl minimal zu halten. Aber vielleicht begebe ich mich mit dieser Aussage in die Falle vorschneller Optimierung.

Während ich versuchen würde, im Client das gewohnte MVC-Muster zur Darstellung des UI einzusetzen und guter Dinge wäre, dass das klappt, habe ich keine Idee, ob der Ansatz "es ist ein Chat" tragfähig ist und würde wohl damit anfangen.

Sagen wir, die Welt ist flach, quadratisch und besteht aus 100x100 Feldern, die entweder von genau einem Spieler oder Monster betretbar oder unbetretbar sind. Ein Spieler steht in einem Feld und hat 10 Lebenspunkte. Er kann eine Waffe tragen und benutzen. Ohne Waffe richtet ein Spieler 0-1 Punkte Schaden an. Mit einer Waffe (abhängig von der Waffe) 0-5 Punkte. Ein Monster steht steht in einem Feld und hat eine Stufe zwischen 1-10. Seine Lebenspunkte sind Stufe x 3 und der Schaden 0-Stufe. Waffen können auch auf Feldern liegen und der Spieler sammelt sie auf und nimmt automatisch die bessere, wenn er auf das Feld läuft. Monster schlafen (und bewegen sich nicht) oder sind erwacht (durch einen Angriff) und haben einen Gegner, dem sie dann X Sekunden folgen und ihn anzugreifen versuchen. Dies ist mit (11-Stufe)x10% Wahrscheinlichkeit, der der sie angegriffen hat und ansonsten ein zufälliger Gegner. Erwacht ein Monster, erwachen umstehende ebenfalls mit einer Wahrscheinlichkeit von (6-Entfernung)x10%. Das definiert (hoffentlich vollständig) ein Spiel.

Hieran kann man dann erstmal mögliche Konzepte testen :)

Stefan
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

sma hat geschrieben:Ihr braucht aber erstmal ein funktionierendes Regelsystem für das Spiel. Vielleicht kann man sich die D20-Regeln schnappen, die unter eine GPL-artigen Lizenz eingesetzt werden könnten, doch ich persönlich finde alles, wofür D20 und D&D stehen, nur schlecht und würde da weitersuchen :) Kein echter Rollenspieler wird nicht schon einmal versucht haben, sich seine eigenen Regeln zu erfinden - daher weiß ich, dass dies kein einfaches Unterfangen ist. Hand in Hand mit den Regeln geht das Konzept für die Welt - der Hintergrund: Länder, Kulturen, Rassen, Geschichte. Gibt es Magie? Wie funktioniert diese dann? Gibt es Götter? Haben sich Macht auf der Welt?
Das WorldForge-Projekt hat sich mit all diesen Fragen schon beschäftigt. Die Implementationen sind allerdings alle in C++ ausgeführt, soweit ich gesehen habe. Vielleicht würde das Projekt mit Python noch mehr in Fahrt kommen. :)

EDIT: Vielleicht mal das Topic anpassen?
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

mkallas hat geschrieben:EDIT: Vielleicht mal das Topic anpassen?
Nein, ich denke nicht. Denn ich bin ja eigentlich auf der Suche nach so einer Grafik-Engine und nicht nach einer funktionierenden Fantasywelt. Trotzdem bedanke ich mich für die Meinungen. Gerade sma hat das ja wunderschön ausführlich aufgelistet, was alles zu beachten ist.

Im moment geht es mir (mir persönlich zumindest) um die technische Seite, da mich diese Ansicht mit nur Linien/Vektoren als Grafik so sehr beeindruckt hat. Am liebsten würde ich in diesem Look sofort einen 3D-Weltraumshooter, mit einer Welt so groß wie die Milchstraße schaffen. Aber das übersteigt wohl meine Fähigkeiten bzw. Freizeit im Moment bei weitem :-)

Nochmals zu sma's Post: Gerade das mit dem "massive" Multiplayer-Part interessiert mich von der Machbarkeit her sehr. Ich bin Informatik Student im ersten Semester und würde gerne testen was ich da alles hinbekommen kann. Zwar ist sicher Python nicht die Sprache der Wahl wenn es um Geschwindigkeit geht -- aber es stellt alles zur Verfügung was man braucht. Und hoffentlich genug um so eine Server-Client Architektur hinzubekommen.

Zuerst hätte ich, wie bereits erwähnt eine TechPreview geplant. Diese sollte ohne jeglichen Inhalt zur Story, Fantasywelt oder anderen Dingen haben sondern sich nur auf die technischen Dinge wie Grafik, Architekturplanung, "rumlaufen-können" beschränken. Noch dazu nur Singleplayer um möglichst schnell zum Ziel zu kommen.


¹: im Gegensatz zu C/C++ oder Java. Aber allein der Tippaufwand ist in Python um sovieles geringer ... Ich möchte nur schnellst möglich zu einem sichtbaren Ergebnis kommen, so wie auch es BlackJack schon vorgeschlagen hat.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich hätte gedacht, WorldForge wäre schon vor vielen Jahren einen gnädigen Tod gestorben :) Vor 10 Jahren hielt ich das Projekt schon für überambitioniert und während es beachtlich ist, dass es überhaupt etwas gibt und es noch lebt, hätte es IMHO deutlich mehr Bedeutung gehabt, wenn die schon nach einem Jahr oder so etwas Fertiges hätten liefern können.

Ansonsten, phxx, als Student hast du per definitionem Zeit :)

Aus meiner Sicht ist das Thema einer Grafikengine wohl verstanden und die größte Schwierigkeit liegt in einer guten C/S-Kommunikation. Aus diesem Grund würde ich nicht empfehlen, deine Tech-Preview auf nur einen Spieler zu beschränken. Ich denke auch nicht, das die Wahl einer Programmiersprache und deren roher Geschwindigkeit, entscheidend ist. Das Netzwerk wird dein Bottleneck sein - egal welche Sprache du bevorzugst. Du brauchst letztlich clevere Algorithmen.

Stefan
Antworten