Winkel zum Object in schritten drehen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Winkel zum Object in schritten drehen

BeitragSo, Sep 23, 2007 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie mach ich dass wenn ich eine Kanone habe, die sich immer zum spieler drehen soll,aber so, dass sie nicht sofort dahin sprigt sondern in schritten sich dahindreht ?

thx und mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Madde

Gast

BeitragSo, Sep 23, 2007 14:39
Antworten mit Zitat
Nun, zuerst musst du den Winkel zwischen Kanone und Spieler herausfinden --> das geht mit ATan2(). Danach prüfst du ob der aktuelle Kanonenwinkel von diesem Wert abweicht. Wenn ja, drehst du die Kanone.

ToeB

BeitragSo, Sep 23, 2007 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ne das hab ich ja schon längst.

Aber mal n beispiel (sonst würd ich ja net fragen)

Ich hab jetzt den winkel zwischen den beiden, 350°. Der aktuelle winkel ist aber 10° dann geht der stadt nach den Kürzeren "Weg" über 0° zu nehmen zählt der dann runter !


thx und mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Madde

Gast

BeitragSo, Sep 23, 2007 15:26
Antworten mit Zitat
Direkt aus dem Stehgreif kann ich dir das jetzt auch nicht sagen, allerdings kannst du das auch selbst ausprobieren.

Versuche erst einmal dass sich die Kanone Richtung Mauszeiger dreht: Dazu lässt du dir die verschiedenen Winkel (Winkel Kanone und Winkel Kanone/Maus) auf dem Bildschirm ausgeben. Jetzt bewegst du die Maus um die Kanone herum und versuchst Regelmäßigkeiten zu erkennen: in welchen Fällen soll sich die Kanone nach links, in welchen nach rechts drehen ?
(Wahrscheinlich musst du beide Winkel miteinander verknüpfen, beispielsweise Winkel Kanone + Winkel Kanone/Maus)

Edit:
So müsste es funktionieren:
mouse_cannon_angle = Winkel zwischen Maus und Kanone
cannon_angle = Winkel der Kanone [0,359], bei 0 zeigt die Kanone nach rechts (notfalls dein Bild anpassen)
mx, my = Mausposition

Code: [AUSKLAPPEN]
Function angle#(x1,y1,x2,y2)
   Local dx# = x2 - x1
   Local dy# = y2 - y1
   Return (ATan2(dx#, dy#)+360) Mod 360
End Function

; Winkel zwischen Maus und Kanone herausfinden...
mouse_cannon_angle = Int(angle#(cannon_x#, cannon_y#, mx, my))
; Rotationswinkel der Kanone draufrechnen...
mouse_cannon_angle = mouse_cannon_angle + cannon_angle
; Das ganze jetzt in ein Intervall [0,359] bringen ...
If mouse_cannon_angle > 359 Then mouse_cannon_angle = mouse_cannon_angle - 360
If mouse_cannon_angle < 0 Then mouse_cannon_angle = mouse_cannon_angle + 360
   
; Und hier die Fallunterscheidung fürs drehen...
; Wenn  mouse_cannon_angle 90 ist, zeigt die Kanone direkt auf die maus
If mouse_cannon_angle > 90 And mouse_cannon_angle < 270 Then
   cannon_angle = cannon_angle - 1
ElseIf mouse_cannon_angle <> 90 Then
   cannon_angle = cannon_angle + 1
EndIf


Edit 2: @ Hubsi
Das wird so nicht funktionieren, da du beide Winkel betrachten musst, den Rotationswinkel der Kanone und den Winkel zwischen Kanone und Spieler (bzw. Mauszeiger in meinem Beispiel)
  • Zuletzt bearbeitet von Madde am So, Sep 23, 2007 16:15, insgesamt 3-mal bearbeitet

Hubsi

BeitragSo, Sep 23, 2007 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
if 359-angle_actuall>180 dreh_links() else dreh_rechts()


Wenns nicht funktioniert... Pech Very Happy

ToeB

BeitragSo, Sep 23, 2007 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
@Madde :

Erstmal danke, aber es lässt sich nicht auf mein spiel übertragen, da ich ganz andere werte genommen habe....

@Hubsi :

Haha wie lustig, ich mein dann dreht der sich immer bis 180° und dann bleibt der so... Rolling Eyes


mfg Crack93

~EDIT~
So hab ne Lösung gefunden :
Code: [AUSKLAPPEN]
f\w = Abs(-ATan2(400-(f\x-x),300-(f\y-y))+180)
If f\winkel > f\w And f\winkel -180 < f\w Then f\winkel = f\winkel -5
If f\winkel > f\w And f\winkel -180 > f\w Then f\winkel = f\winkel +5
If f\winkel < f\w And f\winkel +180 < f\w Then f\winkel = f\winkel -5
If f\winkel < f\w And f\winkel +180 > f\w Then f\winkel = f\winkel +5
If f\winkel = f\w -180 Or f\winkel -180 = f\w Then f\winkel = f\winkel +5


Funzt prima !

mfg Crack93

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Sep 23, 2007 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal meine alte Function mit Beispiel
Code: [AUSKLAPPEN]
Graphics 800 ,600,16,2
SetBuffer BackBuffer ()
Dim Panzer (360)
;PanzerGrafik_berechnen > 360 Einzelbilder <
Rect 9 ,0,2,20
Rect 0 ,10,20,20,1
Flip
Panzer (0) = CreateImage (20 ,30)
GrabImage Panzer (0) ,0,0
MidHandle Panzer (0)

For z = 1 To 359
    panzer (z) = CopyImage (Panzer (0) )
    RotateImage panzer (z) ,z
    Text 500 ,500," Berechne Panzer : " + z
    If z Mod 10 = 0 Then Flip
    Cls
Next

x = 400 : y = 30 ; damit der zielpunkt zu sehen ist

Repeat
    If MouseDown (1) Then
        x = MouseX ()
        Y = MouseY ()   ;Winkel bezieht sich auf den Panzer
        winkel = Objekt_richtung_grad (x,y ,400 ,300)
    End If
    posPanzer = (posPanzer + drehAufZiel (pospanzer,winkel) + 360) Mod 360
    Oval x - 5 ,y - 5 ,10,10,1 ;Klickpunkt malen
    DrawBlock Panzer (posPanzer) ,400,300;Panzer malen
    Text 100 ,30, posPanzer + " Panzer"
    Text 100 ,60, winkel +   " Grad"
    Flip
    Cls
Until KeyHit (1)

End

Function Objekt_richtung_grad (Zielpunkt_X,Zielpunkt_Y,Ausgangspunkt_X,Ausgangspunkt_Y )
    grad = ATan2 (Zielpunkt_Y - Ausgangspunkt_Y, Zielpunkt_X - Ausgangspunkt_X) + 90
    grad = (grad + 360) Mod 360
    Return grad
End Function

Function drehAufZiel (pospanzer,winkel)
    If posPanzer > Winkel Then
        If posPanzer - 180 < Winkel Then Return - 1
     Else
        If posPanzer + 180 < Winkel Then Return - 1
    End If
    Return 1
End Function
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group