Winkel zum Object in schritten drehen
Übersicht

![]() |
ToeBBetreff: Winkel zum Object in schritten drehen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
MaddeGast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
MaddeGast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] if 359-angle_actuall>180 dreh_links() else dreh_rechts()
Wenns nicht funktioniert... Pech ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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... ![]() 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 |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group