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)
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
(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
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)
Code: Alles auswählen
Raster(1,1,1)\3DObjekt[1] = *Camera
Raster(1,1,1)\ObjektArt[1] = #art_Camera
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
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 ()
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: