Pathfinding Problem
Übersicht

![]() |
FirstdeathmakerBetreff: Pathfinding Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich brauche für die KI in meinen Weltraumshooter eine Art pathfinding System, das dafür sorgt dass die Computergesteuerten Raumschiffe nicht sinnlos rumfliegen sondern z.B. spezielle Routen abfliegen oder den Spieler verfolgen e.t.c.
Um das Problem zu lösen hab ich das erstmal in einem kleinen Testprogramm versucht, aber leider funktioniert nicht alles so wie ich das will. Wenn man das Schiff auf "auto_route=2" stellt, es also hinter dem Mauszeiger gerjagen lassen möchte, und man dann nach ganz oben an den Bildschirmrand geht und bevor es einen erwischt runter zieht, fängt es an Halbkreise zu ziehen und nach oben zu verschwinden. Hier der Code: Code: [AUSKLAPPEN] SCREEN_X=800
SCREEN_Y=600 Graphics SCREEN_X,SCREEN_Y,16,2 SetBuffer BackBuffer() Type nav_point Field x Field y Field action;0=ende, 1= next point End Type Type ship Field x# Field y# Field winkel# Field max_turn# Field speed# Field nav_point.nav_point Field auto_route End Type ship.ship=New ship ship\x=SCREEN_X/2 ship\y=SCREEN_Y/2 ship\max_turn=1 ship\speed=1.1 ship\auto_route=2; 1= Pathfinding per Navigationspunkte, 2=Mausjagd ship\nav_point.nav_point=New nav_point ship\nav_point\x=100 ship\nav_point\y=100 ship\nav_point\action=1 ship\nav_point.nav_point=New nav_point ship\nav_point\x=200 ship\nav_point\y=500 ship\nav_point\action=1 ship\nav_point.nav_point=New nav_point ship\nav_point\x=500 ship\nav_point\y=400 ship\nav_point\action=0 ship\nav_point.nav_point=First nav_point Repeat If ship\auto_route=1 x#=ship\nav_point\x-ship\x y#=ship\nav_point\y-ship\y winkel#=((ATan2(x,y)) Mod 360) If winkel>ship\max_turn+ship\winkel ship\winkel=ship\max_turn+ship\winkel ElseIf winkel<-ship\max_turn+ship\winkel ship\winkel=-ship\max_turn+ship\winkel Else ship\winkel=winkel EndIf ship\x=ship\x+(ship\speed*Sin(ship\winkel)) ship\y=ship\y+(ship\speed*Cos(ship\winkel)) If ship\x<ship\nav_point\x+1 And ship\x>ship\nav_point\x-1 And ship\y<ship\nav_point\y+1 And ship\y>ship\nav_point\y-1 Stop Select ship\nav_point\action Case 1 ship\nav_point=After ship\nav_point Case 0 ship\auto_route=0 End Select EndIf ElseIf ship\auto_route=2 x#=MouseX()-ship\x y#=MouseY()-ship\y winkel#=((ATan2(x,y)+360) Mod 360) If winkel>ship\max_turn+ship\winkel ship\winkel=ship\max_turn+ship\winkel ElseIf winkel<-ship\max_turn+ship\winkel ship\winkel=-ship\max_turn+ship\winkel Else ship\winkel=winkel EndIf ship\x=ship\x+(ship\speed*Sin(ship\winkel)) ship\y=ship\y+(ship\speed*Cos(ship\winkel)) EndIf Cls For a.nav_point=Each nav_point Rect a\x-5,a\y-5,10,10,0 Next Rect ship\x,ship\y,2,2 Text 10,10,ship\x+"/"+ship\y Text 10,20,winkel Flip Until KeyHit(1) |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group