Ki erstellen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Blasterfreund

Betreff: Ki erstellen?

BeitragSo, Jan 09, 2011 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich bin gerade bei meinem ersten 3d - Spiel und arbeite gerade an meiner ersten KI.
Sie ist recht einfach aber es schleichen sich laufend Fehler ein.
im Moment bin ich damit beschäftigt, den Teil zu programmieren, der alle gesammelten Daten logisch verarbeitet und die KI danach handeln lässt.
es ist eine einfache Verfolgungs-KI, die sich nach dem Spieler ausrichtet und auf ihn zuläuft.
Ich brauche nur hilfe bei den verschiedenen If-Sätze.
die Werte die eingegeben werden sind:
Degree# = winkel in die der Block sich befinden müsste um den Spieler mit seiner Vorderseite anzusehen.
EntityYaw(obj) = aktueller winkel des Objekts
wie stelle ich es mit If-Sektionen an das der Block sich zu mir dreht und wenn er mich ansieht er nach vorne läuft?
Weiß einer wie ich das aufbauen sollte?
ich bin soweit mit den If - Sätzen aber sie Funktionieren nicht also werfe ich die für eine bessere Funktion von euch gerne über Boot:BlitzBasic: [AUSKLAPPEN]
;funktion zur Verfolgung
Function follower_Ki(obj,obj2,turnrate,turnlimit,speed#)
Degree# = Locate_degree_unit (EntityX (obj),EntityX (obj2),EntityZ (obj),EntityZ (obj2))
;Degree# ist die ideall Winkelstellung, um den Spieler anzuvisieren.
;obj ist der verfolger,obj2 der verfolgte.
;turnrate bestimmt die winkelzahl um die sich der verfolger dreht.
;turnlimit bestimmt die mögliche abweichung von der ideallen winkelstellung zum verfolgtem objekt
;speed# bestimmt die geschwindigkeit mit der sich der verfolger bewegt.


If EntityYaw(obj) + turnlimit < Degree# Or Even (EntityYaw(obj) - turnlimit) > Degree# Then

If EntityYaw(obj) < Degree# And turnV( EntityYaw(obj)) > Degree# Then;wenn der spieler rechts von ihm ist.
TurnEntity obj,0,turnrate,0;nach rechts drehen

ElseIf EntityYaw(obj) > Degree# And turnV( EntityYaw(obj)) < Degree# Then;wenn der Spieler links von ihm ist.

TurnEntity obj,0,-turnrate,0;nach links drehen

EndIf

Else
MoveEntity obj,speed#,0,0

EndIf
End Function

schon mal danke im vorraus! Smile
In a world without walls and fences who need gates and windows.

Johannes´

BeitragSo, Jan 09, 2011 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Befehl DeltaYaw sollte für dich nützlich sein.
Hier ist mal deine Funktion etwas umgeschrieben:
BlitzBasic: [AUSKLAPPEN]
Function follower_Ki(obj,obj2,turnrate,turnlimit,speed#)
If Abs(DeltaYaw(obj,obj2))>1 Then
TurnEntity obj,0,DeltaYaw(obj,obj2)/turnrate,0
Else
MoveEntity obj,0,0,speed#
EndIf
End Function

Blasterfreund

BeitragMo, Jan 10, 2011 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Thx funktioniert blendend!
vielen Dank für die schnelle Antwort!
In a world without walls and fences who need gates and windows.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group