3D RPG Programmierung -> Einstieg

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
Benutzeravatar
Max_der_Held
Beiträge: 594
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

3D RPG Programmierung -> Einstieg

Beitrag von Max_der_Held »

Bild
Hallo Leute.
Hier werden einige Grundzüge zum Schreiben eines infiniten 3D Spieles gezeigt (mit theoretisch unendlich großer Karte)

1. Ausstattung.
  • Purebasic (4.X)
  • Die 3D Engine.
    Wer geld ausgeben kann/will, dem rate ich zur Leadwerks engine
    Dem Rest wir die N3xtD 3D Engine empfohlen (gute Doku, integrierte Shader, Joint-Physik etc; zur Zeit nur extern verfügbar -> hat keine homepage.
    Download: http://lunamedia.heim.at/files/n3xtd_20.zip
    Downlaod: http://lunamedia.heim.at/files/n3xtd-lightmap.zip
  • IrrKlang vom Thalius-Irrlicht-Wrapper; muss nocht für pb 4.4 angepasst werden (nur für profis) -> ansonsten andere sound-engine suchen.
  • IrrEdit als Mapeditor (für mittlere/kleine Maps)
  • JaPBe wird empfohlen, ist aber nicht zwingend notwendig.. aber: bessere autovervollständigung, Automatische Groß/kleinschreibung wenn das Wort schonmal geschrieben wurde, einfaches springen zu Funktionen per doppelklick und STRG auf den Befehl und vieles mehr spricht dafür. (außer auf 64-bit systemen.. hat 64-bit-schwächen)
  • SVN Server (nicht zwingend, aber extremst!!! vorteilhaft. nachteil: du brauchst einen Server-PC im Keller)
Wenn das alles steht beginnt die Planung. Also Skizzen der wichtigen Spielbereiche/Menüs -Ingame-Elemente und einen Programmablaufplan anfertigen, wenn möglich.

Alle Programmbereiche sollten in komplett unabhängigen includes getrennt sein.
jede Include wird doppelt erstellt; in die eine kommen alle:
  • structuren
  • globalen variablen/arrays/linked lists
  • Konstanten
in die anderen die Proceduren.
(im Optimalfall hat jede Include ca. 1000/2000 Zeilen wenn sie fertig ist, zwecks der Übersichtlichkeit)

Beispiel für Includes:
  • Include_all ; includiert alles
    include_animation
    include_anzeige ; für alles komplett alles, was mit der 3d engine zu tun hat. außerhalb dieser Procedur darf also kein 3d-engine-befehl verwendet werden! (fehlersicherheit)
    include_gui
    include_item
    include_kampfsystem
    include_KI
    include_netzwerk
    include_math
    include_spieler
    include_teams
    include_wegfindung
    include_wesen
    include_quest
    Main
3D spiele funktionieren grundsätzlich so:
Alle 3D Objekte befinden sich in einem 3D-Raster.

Code: Alles auswählen

Structure raster
   3DObjekt[20]
   ObjektArt[20]
Endstructure
Global DIM Raster.raster(x,y,z)
In Jedem Rasterwürfel können sich 3D Objekte registrieren, diese können unterschiedlichster Art sein (z.B. eine Camera)

Code: Alles auswählen

Raster(1,1,1)\3DObjekt[1]  = *Camera
Raster(1,1,1)\ObjektArt[1] = #art_Camera
Nur die direkte Umgebung des Spielers wird bearbeitet

Code: Alles auswählen

For x = -3 to 3
   For y = -3 to 3
      For Z = -3 to 3
         for n = 1 to 21
            ; verarbeiten.. z.b. angreifen.
            if Raster(1,1,1)\Objektart[1] = #art_Spieler and Mousebutton(1) 
               Attacke ( Raster(1,1,1)\objektart[1] ) 
            endif 
          next
      next
   next 
next 
Diese Technik hilft auch beim Prüfen ob in den umliegenden Rasterblöcken z.B. Gegner oder Items herumliegen, oder beim Generieren der Minimap.

bewegt sich eine figur, und geht von einem Rasterblock zum anderen, so wird sie beim einen Block aus der Registrierung gelöscht und beim neuen Block wieder neu-registriert.

Um die Höhe des Bodens herauszubekommen auf dem der spieler ja stehen muss gibt es verschiedene Techniken.
Bewährt hat sich ein einfacher Editor, mit dem man die begehbaren Flächen markieren kann, sogenannte "tiles"
jedes 3D "Tile" hat Pointer zu seinen direkten Nachbarn. Dadurch ergibt sich ein Netz von 3D Punkten über das die NPCs gehen können.
Auch die Wegfindung wird so viel leichter.
(Es wird die Höhe für alle paar Meter in einer eigenen Datei gespeichert)

allgemeine Tipps:
erst wenn das Spiel komplett fertig ist den Sourcecode "richtig" optimieren (Sprich: Prüfen, wo das Programm am meisten Zeit braucht)
Niemals das Ganze Projekt komplett neu anfangen, lieber gleich ordendlich programmieren (länger planen)
Übersichtlichkeit, lange Procedurenamen, keine "freien" Befehle die ohne Procedure direkt im Code herumstehen (leichter zu debuggen)
Den Editor nicht vergessen, er ist genauso wichtig wie das ganze Spiel selbst.

Pseudocode eines 3D RPGs:

Code: Alles auswählen

include includes\include_all.pb
Init3DEngine ()
Menü()  -> Create Menü -> Spiel startet dann mit Menü.
SetGui()

Repeat
     
      anz_updateinput         ()
      anz_updateparticles     ()
      anz_updatesound         ()
      anz_updateDeleteAnimator()
      anz_setShownObjects     ( spi_GetPlayerNode( spi_getcurrentplayer()) )
      anz_updateview          ()
      anz_displayImages       ()
      gui_updateGUI           ()
      anz_updateNetwork      ()
       
Ansonsten viel Glück

lg
max

ps:

-> Fortsetzung ->


Installation N3xtD-Engine ->

Start
Genau wie jede Installerlose PB-Library/erweiterung etc.
hier recht einfach -> Zip datei entpacken und "Pure libraries" in den gleichnamigen Ordner (Pure libraries) in eurem PB-Installationsverzeichnis kopieren (standard: "C:\programme\Purebasic")
der Ordner DOC beinhaltet die immer wieder wichtige Hilfedatei (wichtig!) man kann einen Ordner "Hilfe" im pb-verzeichnis erstellen und da die doc-dateien reinwerfen (und dann per IDE aufrufen. vor allem beim japbe)
der andere Ordner beinhaltet die Beispieldateien!! mit ihnen lernt Ihr 3d programmieren.
einfach eine nach der anderen durchlesen und verändern! learning by doing!

Erstes 3D RPG:
Bild
Zuletzt geändert von Max_der_Held am 27.07.2010 18:56, insgesamt 2-mal geändert.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: 3D RPG Programmierung -> Einstieg

Beitrag von super_castle »

n3xtd wird für Purebasic nicht mehr weiterentwickelt.
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: 3D RPG Programmierung -> Einstieg

Beitrag von jojo1541 »

Und nur um das jetzt nochmal schreiben zu können, kramst du den Thread hervor? :?
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
Max_der_Held
Beiträge: 594
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: 3D RPG Programmierung -> Einstieg

Beitrag von Max_der_Held »

N3xtd ist im vergleich von den kostenlosen 3D Graphic Engines:
  • neotoma/thalius-irrlicht
    pb ogre
    und dreamotion3d
die am besten entwickelte und dokumentierte (mit über 100 Beispiel-sourcecodes von ziemlich allen funktionen)
Sie hat so viele Funktionen zu Physik, Shader und Graphik dass man mit ihr professionelle und zeitgemäße Spiele machen kann (wer kann).
(das Gui system ist auch gleich bis weiter fortgeschritten als das von PB ogre und die Oberfläche lässt sich leichter verändern, einige Beispielshader sind integriert.)

aber leider wirds nicht mehr weiter entwickelt.
wie alle anderen oben genannten bedauerlicherweise ebenfalls :( (abgesehen von der ogre)

tipp: nach einiger Einarbeitszeit in eine kostenlose 3D Engine entweder eine kostenpflichtige kaufen oder zu c++ wechseln und ogre/irrlicht/panda was auch immer verwenden.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: 3D RPG Programmierung -> Einstieg

Beitrag von PMV »

Ich hab mich zwar bis jetzt nur mit OGRE auseinander gesetzt und die
Funktionen nutzen können, die PB eingebunden hat, aber wenn Fred
mal OGRE richtig einbinden würde mit der kompletten Funktionalität ...
genial wäre ja direkter Zugriff auf OGRE wie bei der WinAPI :mrgreen:
... bräuchte sich keiner mehr sorgen um die fehlende 3D-Unterstützung
von PB machen. <)

Leider ist die OGRE-DLL wohl ein COM-Object, weshalb der direkte
Zugriff mit PureBasic fast unmöglich und sehr kompliziert um zu setzen
wäre ... so lang Fred als die Implementierung nur Halbherzig umgesetzt
hat, wäre ich auch für deinen Vorschlag. Einer beschäftigt sich mal mit
C/C++ und OGRE ...

Und mit dem Wissen kann er dann nen Wrapper basteln. :mrgreen:

Ich glaub kaum, das ich dafür die Zeit finde, deswegen hoffe ich nach
wie vor, das Fred + Freak demnächst mal die volle OGRE-Unterstützung
planen. Die Hoffnung stirbt ja bekanntlich zu letzt. :)

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten