Verfolgungsfunktion

Anfängerfragen zum Programmieren mit PureBasic.
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Verfolgungsfunktion

Beitrag 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?
Benutzeravatar
Proton
Beiträge: 152
Registriert: 20.06.2006 12:21
Wohnort: Eckernförde /Stadtbergen

Beitrag 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:
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: Verfolgungsfunktion

Beitrag 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:
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Dieses Beispiel ist echt gut, STARGA°Te :)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Danke STARGÅTE, jetzt,da ich den Code weiß, kann ich dich ja auch so nennen :allright:
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

[OT]
STARGÅTE hat geschrieben: STARGÅTE bitte ! :evil:
Wie wäre es mit
STERNENTØR? :lol: (Alt + 0216)[/OT]
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Beitrag von Rockmaster »

Ok ich werds mal auf diese Weise versuchen...
Danke!
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Schwedisches Å

Beitrag 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
Antworten