Verhalten von NPC's per Datei steuern - wie?
Übersicht

fliegeBetreff: Verhalten von NPC's per Datei steuern - wie? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab' mich mal dahinter gesetzt, und jetzt das erste Problem...![]() Er ändert die richtung nicht ![]() 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.. ? |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group