Seite 1 von 2

Verfolgungsfunktion

Verfasst: 22.08.2006 18:37
von Rockmaster
Hi Leute ich wollte ich hab ein Problem mit automatischer bewegung von objekten!
Mein Poroblem ist folgendes:
Auf dem Screen kann man eine Figur frei rumbewegen (x/y-werte ändern).
Eine andere Figur soll die spielergesteurte spielfigut aber verfolgen bis sie in kontakt treten.
das problem ist halt dass die spielergesteuerte figur immer wieder wo anders ist wenn man sie bewegt und sich der BOT daran automatisch anpassen soll.

Wie krieg ich das hin das der bot zum spieler flüssig hin läuft und sich nich einfach auf seine koordinaten spwant?

Verfasst: 22.08.2006 18:57
von Proton
Ich verstehe nicht daß das ein problem sein soll.

Du hast doch die x/y-werte der Spielerfigur. erhöhe bzw. erniedrige doch
die Koordinaten des Bots gemäss den bekannten Spielerfigurwerte.

ist x des Spielers kleiner als x des Bots, dann wird x des Bots erniedrigt.
. genauso wird mit y verfahren. Solange bis x/y des Bots gleich
x/y des Spielers ist.

interessant und problematish wird es erst, wenn der Bot im voraus "erahnen"
soll( um dem Spieler den Weg abzuschneiden), wohin sich der Spieler bewegen wird! :wink:

Re: Verfolgungsfunktion

Verfasst: 22.08.2006 20:26
von Jilocasin
Rockmaster hat geschrieben: Wie krieg ich das hin das der bot zum spieler flüssig hin läuft und sich nich einfach auf seine koordinaten spant?
"flüssig" !
hmm.. musst du warscheinlich mit Sin() und Cos() arbeiten..
mal sehen ob ich was finden kann :mrgreen:

Verfasst: 22.08.2006 23:52
von STARGÅTE
Hier hast du ein Beispiel von mir :

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenScreen(1024, 768, 32, "Bot 1.0")

b.f = 3.14159265/180

Bot_x.f = 512
Bot_y.f = 386
Bot_v.f = 0
Bot_w.f = 0
Bot_dw.f = 0

 Repeat
 
  ExamineMouse()
  MouseX = MouseX()
  MouseY = MouseY()
  
  FlipBuffers()
  ClearScreen(0,0,0)
  
  StartDrawing(ScreenOutput())
  
   Bot_x = Bot_x + Cos(Bot_w*b)*Bot_v*0.1
   Bot_y = Bot_y + Sin(Bot_w*b)*Bot_v*0.1

   Bot_w = Bot_w + Bot_dw
   While Bot_w <    0 : Bot_w + 360 : Wend
   While Bot_w >= 360 : Bot_w - 360 : Wend
      
   deX = MouseX-Bot_x 
   deY = MouseY-Bot_y 
   If deX = 0 : 
    If deY < 0 : Winkel = -90 : EndIf 
    If deY >= 0 : Winkel = 90 : EndIf 
   Else 
    Winkel = ATan(deY/deX)/b 
    If deX < 0 : Winkel + 180 : EndIf 
   EndIf 
   Unterschied = Winkel-Bot_w 
    If Unterschied > 180 : Unterschied = Unterschied - 360 : EndIf 
    If Unterschied < -180 : Unterschied = Unterschied + 360 : EndIf 
    If Unterschied > 0 And Unterschied <= 180 : Bot_dw = 2+Unterschied/10 : EndIf 
    If Unterschied < 0 And Unterschied >= -180 : Bot_dw = -2+Unterschied/10 : EndIf 
    If Bot_dw > 45 : Bot_dw = 45 : ElseIf Bot_dw < -45 : Bot_dw = -45 : EndIf 
    If Bot_v > Sqr(Pow(deX,2)+Pow(deY,2))/2 : If Bot_v > 0 : Bot_v = Bot_v - 1 : EndIf : EndIf 
    If Bot_v < Sqr(Pow(deX,2)+Pow(deY,2))/2 : If Bot_v < 50 : Bot_v = Bot_v + 1 : EndIf : EndIf 
  
   ;Bot
   Circle(Bot_x, Bot_y, 10, RGB(255,255,255))
   LineXY(Bot_x, Bot_y, Bot_x+Cos(Bot_w*b)*20, Bot_y+Sin(Bot_w*b)*20)
   
   ;Maus
   Circle(MouseX, MouseY, 5, RGB(128,128,128))   
   
  StopDrawing()
 
 ExamineKeyboard()
 
 Until KeyboardReleased(#PB_Key_Escape) <> 0

End 
Das Ergibnis des ganzen wird sein :

Der BOT dreht sich elegant richtung Ziel und beschleunigt sobalt er die ungefaire Richtung hat.
Wenn er nahe dran ist bremst er wieder ab.

Verfasst: 23.08.2006 08:40
von Alves
Dieses Beispiel ist echt gut, STARGA°Te :)

Verfasst: 23.08.2006 10:04
von STARGÅTE
Alves hat geschrieben:Dieses Beispiel ist echt gut, STARGA°Te :)
STARGÅTE bitte ! :evil: ^^ (Å = Alt+0197)

Ja hat mich aber auch viele Versuche gekostet bis ich dieses BUG-Freie verfolgen hinbekommen habe

Verfasst: 23.08.2006 10:09
von Alves
Danke STARGÅTE, jetzt,da ich den Code weiß, kann ich dich ja auch so nennen :allright:

Verfasst: 23.08.2006 10:30
von Tafkadasom2k5
[OT]
STARGÅTE hat geschrieben: STARGÅTE bitte ! :evil:
Wie wäre es mit
STERNENTØR? :lol: (Alt + 0216)[/OT]

Verfasst: 23.08.2006 13:50
von Rockmaster
Ok ich werds mal auf diese Weise versuchen...
Danke!

Schwedisches Å

Verfasst: 23.08.2006 22:19
von tmjuk
Hallo,
du kannst auch in der Systemsteuerung andere Sprachen dazu "aktivieren". Hier im Beispiel schwedisch, wobei dann das Å auf der Ü-Taste liegt. Zwischen den Tastaturlayouts läßt sich dann bequem mit ALT+Shift umschalten.

Torsten