Verhalten von NPC's per Datei steuern - wie?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

fliege

Betreff: Verhalten von NPC's per Datei steuern - wie?

BeitragMi, Feb 09, 2005 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Kenn mich in diesem Thema nicht allzu gut aus. Wollte daher mal schauen, ob ich es schaffe, einen NPC mit Befehlen wie "SetWayPoint" oder ähnlichem zu steuern. Doch komme ich auf keine Lösung. Ich müsste ja jedemal das Objekt (3D) hindrehen zum Punkt und dann relativ auf der Z - Achse verschieben...Oder gibt es da etwas besseres??
Wie gehe ich dann bei zwei "SetWayPoint" Befehlen vor?? Ich kann ja schwer die Datei neu einlesen, oder?

Freue mich über jede helfende Antwort
Fliege
Wer weiß was kommt.. ?
 

Dreamora

BeitragMi, Feb 09, 2005 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
alles einlesen aus der datei und zb in einen Bewegungsarray parsen, also einen array der die verschiedenen zielpunkte errechnet, vielleicht sogar zwischenpunkte sofern es hindernisse hat die die KI umgehen muss.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

fliege

BeitragMi, Feb 09, 2005 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit dem umgehen von hindernissen hätte ich dann als nächsten schritt geplant... wie meinst du das mit einem Bewegungsarry?? Ich dachte, ich handle das ganze gleich in Types, so ist es nachher leichter neue Points hinzuzufügen, insofern es überhaupt möglich ist...
Danke schon mal im Vorraus
Fliege
Wer weiß was kommt.. ?
 

Dreamora

BeitragMi, Feb 09, 2005 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja ein Array ( oder linear verlinkte Liste ), wo die Punkte die die KI anlaufen soll nach einander eingefügt sind, für ihren Patroliengang wo sie normalerweise durchgehen. ab dem zeitpunkt wo die KI ja was tut wird ohnehin ein neuer array / neue liste erzeugt, die die zielpunkte bestimmt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

fliege

BeitragMi, Feb 09, 2005 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du so in der Richtung
Code: [AUSKLAPPEN]

datei öffnen
.neueaktion
positionen auslesen
aktionswert + 1
wiederhole
 hinbewegen
bis aufdempunktsteht = 1
goto neueaktion
Wer weiß was kommt.. ?
 

Dreamora

BeitragDo, Feb 10, 2005 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze hier in 3 Zeilen zu erklären liegt nicht drin, aber ich versuchs mit ein wenig pseudocode


Oeffne_Datei( "file.ki" )
for i = 1 to Anzahl_Zeilen
command$ = read_line
parse_command( command$ )
goto_next_line
i = i + 1
next
close_datei

und innerhalb von parse_command liest du aus was da steht.

Wenn es ein bewegungspunkt ist, wird dieser dem Bewegungsarray / bBewegungsliste hinzu gefügt, wenn es sonst ein Befehl ist wird er halt entsprechend in die KI struktur eingelinkt.

Tutorials und Artikel dazu solltest du eigentlich auf www.robsite.de oder sonst www.gamedev.net oder www.gamasutra.org finden.

Die Datei wird auf jeden Fall nur 1x ausgelesen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

fliege

BeitragDo, Feb 10, 2005 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab' mich mal dahinter gesetzt, und jetzt das erste Problem...Crying or Very sad
Er ändert die richtung nicht Crying or Very sad
Hier mal der Inhalt der Ki Datei:
SetWayPoint
24

12
SetWayPoint
12

37
______________________________________
Und nun der Code:
Code: [AUSKLAPPEN]
Type NPC
   Field mesh
   Field name$
   Field behaviorfile
   Field target_x#, target_y#, target_z#
   Field action
End Type

Global g_NPC.NPC
Global logfile = WriteFile("Log.txt")
g_NPC = New NPC
   g_NPC\mesh = LoadMesh("b3d/dwarf2.b3d")
   ScaleEntity g_NPC\mesh, .1,.1,.1
   g_NPC\name$ = "Dwarf"
   g_NPC\behaviorfile = ReadFile("dwarf.txt")
   g_NPC\action = PraseBehaviorFile(g_NPC\behaviorfile)
   DebugLog g_NPC\target_x
   DebugLog g_NPC\target_y
   DebugLog g_NPC\target_z
   
Function PraseBehaviorFile(file)
   CmdLine$ = ReadLine(file)
   If CmdLine$ = "SetWayPoint"
      g_NPC\target_x# = ReadLine(file)
      g_NPC\target_y# = ReadLine(file)
      g_NPC\target_y# = TerrainY(g_world, g_NPC\target_x#, 0, target_z#)+1
      g_NPC\target_z# = ReadLine(file)
      Return 1
   EndIf
End Function

Function UpdateNPC()
   For g_NPC = Each NPC
      If g_NPC\action = 1 Then
         If g_NPC\target_x# - EntityX(g_NPC\mesh) >= 3 Or g_NPC\target_x# - EntityX(g_NPC\mesh) <= 3 Or g_NPC\target_z# - EntityZ(g_NPC\mesh) >= 3 Or g_NPC\target_z# - EntityZ(g_NPC\mesh) <= 3 Then
            RotateEntity g_NPC\mesh, VectorPitch(g_NPC\target_x#, g_NPC\target_y#, g_NPC\target_z#), VectorYaw(g_NPC\target_x#, g_NPC\target_y#, g_NPC\target_z#), 0
            MoveEntity g_NPC\mesh, 0,0,1
            PositionEntity g_NPC\mesh, EntityX(g_NPC\mesh), TerrainY(g_world, EntityX(g_NPC\mesh),EntityY(g_NPC\mesh)+1, EntityZ(g_NPC\mesh)), EntityZ(g_NPC\mesh)
            WriteLine logfile, "X:"+EntityX(g_NPC\mesh)
            WriteLine logfile, "Y:"+EntityY(g_NPC\mesh)
            WriteLine logfile, "Z:"+EntityZ(g_NPC\mesh)
         Else
            PraseBehaviorFile(g_NPC\behaviorfile)
         EndIf
      EndIf
   Next
End Function

was stimmt da nicht??
Wenn mir jemand helfen könnte, wäre ich euch sehr dankbar...
Fliege
Wer weiß was kommt.. ?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group