hinter wand in deckung gehen [3d]
Übersicht

![]() |
mas93Betreff: hinter wand in deckung gehen [3d] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute,
Ich habe nun das Grundgerüst meines Spiels fertig und möchte nun einen Gegner einbauen, der mich angreift und aber auch in deckung gehen kann. Das 2. ist im moment mein Problem. Ich habe folgende Situation: die rote Linie ist der gegner, und der blaue punkt ist sein ziel. Wie mache ich nun am besten, dass der gegner zu dem Punkt läuft und um die Wand herumläuft? Welche befehle benutze ich am besten? Da es das erste mal ist, dass ich einen KI in 3d progge, kenne ich einige Befehle noch nicht. Dashier war mein Ansatz: Code: [AUSKLAPPEN] Function updategegner()
For g.gegner=Each gegner If g\status=1 Then ;Wenn gegner im angriffs modus ist For c.cpoint=Each cpoint If c\nummer=g\point Then li=LinePick(EntityX(g\entity),EntityY(g\entity),EntityZ(g\entity),c\x,c\y,c\z) If li=0 Then AlignToVector g\entity,c\x,c\y,c\z,x MoveEntity g\entity,0,0,1 If Int(EntityX(g\entity))=c\x Then g\status=2 If Int(EntityZ(g\entity))=c\z Then g\status=2 Else g\status=2 EndIf EndIf Next EndIf If g\status=2 Then ;wenn gedrerht wird For c.cpoint=Each cpoint turn=1 li=LinePick(EntityX(g\entity),EntityY(g\entity),EntityZ(g\entity),c\x,c\y,c\z) If li=0 Then g\status=1 If turn=1 Then TurnEntity g\entity,0,-0.5,0 EndIf If turn=2 Then TurnEntity g\entity,0,1,0 EndIf MoveEntity g\entity,0,0,1 :w=0 Next EndIf Next End Function Ich habe den Befehl linepick gefunden, aber ich habe auch relativ schnell bemerkt, dass er mir nicht sehr viel hilft, da ich eher überprüfen sollte, ob sich in der aktuellen Drehrichtung des gegners eine Wand befindet, und nicht ob sich in der Luftlinie(gegner,Ziel) eine Wand befindet. Könnt ihr mir hier ein paar Tipps geben? Wäre nett, wenn ihr mir da helfen könntet. mfg mas93 P.S.: Ich weiss, dass der code noch nicht soviel bringt, den ich gepostet habe. Er soll lediglich zeigen, das ich schon etwas versucht habe und nicht einfach so frage... |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir Pathfinding an. Solltest per SuFu vieles finden. | ||
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstelle eine Linie zwischen dem Ziel und dem Gegner, die du dann aber um einen dritten Punkt erweiterst(also ein Dreieck). Diesen Punkt bewegst du dann im rechten Winkel solange von der Hypothenuse weg, bis die zwei Kathetenlinien das Hindernis nicht mehr durchkreuzen. Dann erstellst du an diesem Punkt einen Pivot und lässt den Gegner dorthin laufen. Wenn er angekommen ist, dürfte er dich dann im Blickwinkel haben ![]() Edit: Allerdings funktioniert das auch nur wenn sich nur ein Hindernis im Weg befindet, bei mehreren Hindernissen ist Pathfinding besser, aber auch komplizierter. |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, ich werde mir pathfinding mal anschaun. Stimmt, das war der Begriff über den ich dauernd rätsle^^
@Willi die Rübe: Ich weiss nur in etwa, wie du das jetzt meinst. Wäre nett wenn du das nochmal erklären könntest. Ich habe nämlich Probleme mit den Begriffen Hypothenuse. Ich weiss zwar, was das c.a ist aber mehr auch nicht^^ Wäre nett wenn du das nochmal für mich erklären könntest. mfg mas93 |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Merk dir einfach, dass die Hypothenuse die Basis, also die längste Seite im Dreieck ist. Die Katheten die 2 Anderen. Ich hab dir mal ein Beispiel in 2D gecodet, dass das Prinzip verdeutlicht. Allerdings Achtung, versuche nicht diesen Code in 3D umzusetzten oder in 2D damit rumzuspielen, da er eben nur den Zweck hat dir das Prinzip zu verdeutlichen, da der Code nicht wirklich nach den Grundsätzen die ich oben genannt habe, geht(hatte keine Lust die ganzen Berechnungen durchzuwurschdeln, sollte aber in 3D einfacher sein). ![]() Code: [AUSKLAPPEN] Graphics 800, 600, 16, 2
SetBuffer BackBuffer() HidePointer() Repeat Cls Color 255,255,255 Line 320,295,480,295 linienkreuzensich=Linescross(MouseX(),MouseY(),400,400, 320,295,480,295,0) If linienkreuzensich Then ax=Linescross(MouseX(),MouseY(),400,400, 320,295,480,295,1) ay=Linescross(MouseX(),MouseY(),400,400, 320,295,480,295,2) bx=ax While a=0 ax=ax+20 bx=bx-20 l1=Linescross(MouseX(),MouseY(),ax,ay,320,295,480,296,0) l2=Linescross(ax,ay, 390,390, 320,295,480,296,0) l3=Linescross(MouseX(),MouseY(),bx,ay,320,295,480,296,0) l4=Linescross(bx,ay, 390,390, 320,295,480,296,0) If l1=0 And l2=0 And (l3=1 Or l4=1) Then a=1 If l3=0 And l4=0 And (l2=1 Or l1=1) Then a=2 : ax=bx Wend Oval ax,ay,5,5 Color 150,150,150 Line MouseX(),MouseY(),ax,ay Line ax,ay, 400,400 Color 255,0,0 a=0 Else Color 255,255,255 EndIf Line MouseX(),MouseY(),400,400 Color 0,0,255 Oval 390,390,20,20,1 Color 255,0,0 Oval MouseX()-5,MouseY()-5,10,10 Flip Until KeyHit(1) End Function LinesCross#(x0#,y0#, x1#,y1#, x2#,y2#, x3#,y3# ,typ ) n# = (y0#-y2#)*(x3#-x2#) - (x0#-x2#)*(y3#-y2#) d# = (x1#-x0#)*(y3#-y2#) - (y1#-y0#)*(x3#-x2#) If Abs(d#) < 0.0001 Return False Else Sn# = (y0#-y2#)*(x1#-x0#) - (x0#-x2#)*(y1#-y0#) AB# = n# / d# If AB#>0.0 And AB#<1.0 CD# = Sn# / d# If CD#>0.0 And CD#<1.0 int_X# = x0# + AB#*(x1#-x0#) int_Y# = y0# + AB#*(y1#-y0#) If typ=1 Then Return int_X# If typ=2 Then Return int_Y# If typ=0 Then Return True End If End If EndIf Return False End Function |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
(Hypotenuse heißt es nur im rechtwinkligen Dreieck) ![]() |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group