Seite 1 von 1
Winkelberechnung
Verfasst: 24.04.2010 10:34
von MoonWolf
Hallo
Ich möchte folgende machen:
Bei einem Spiel (2D-Shooter, Vogelperspektive) soll die Spielfigur mit der Maus gedreht werden.
Ich habe versucht das mit RotateSprite3D zu machen und den Winkel mit ACos und Cos zu berechnen.
Nur iwie funktionniert das nich richtig.
Code: Alles auswählen
Procedure Degree(x1,x2,y1,y2)
Ankathete=(y1)-(y2)
Hypotenuse=Sqr(Pow((x1)-(x2),2) + Pow((y1)-(y2),2) )
ProcedureReturn (ACos(Cos(Ankathete/Hypotenuse))* 180 / 3.14159)
EndProcedure
Procedure EnginePhysics()
RotateSprite3D(101 , Degree(player\x,MouseX(),player\Y,MouseY()) , #PB_Absolute)
Endprocedure
Wär nett wenn mir jemand helfen könnte.
DANKE!!!

Re: Winkelberechnung
Verfasst: 24.04.2010 10:41
von STARGÅTE
Dir ist schon klar das ACos(Cos()) "ganix macht"
aber eal, da du in deiner Signatur nicht angegeben hast welche PB-Version du nutzt, hier eine "alte" Variante:
Code: Alles auswählen
; Berechnet den Winkel
Procedure.f Angle(x.f,y.f)
Protected Angle.f
Angle = ATan(y/x)
If x < 0 : Angle + #PI : EndIf
If x = 0 And y = 0 : Angle = 0 : EndIf
ProcedureReturn Angle*180/#Pi
EndProcedure
In der Anwendung übergibst du die Differenz zwischen Maus und Spieler:
Hinweis: Das nächste mal bitte die Suche benutzen, diese Frage wurde schon viele male gestellt!
Re: Winkelberechnung
Verfasst: 24.04.2010 10:59
von MoonWolf
ok danke. aber das funktionniert trotzdem nich richtig.
PB Version ist 4.31
Re: Winkelberechnung
Verfasst: 24.04.2010 11:04
von STARGÅTE
aber das funktionniert trotzdem nich richtig
wenig Aussagekräftig oder ?
Hier eine BeispielDemo:
Code: Alles auswählen
InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
; Berechnet den Winkel
Procedure.f Angle(x.f,y.f)
Protected Angle.f
Angle = ATan(y/x)
If x < 0 : Angle + #PI : EndIf
If x = 0 And y = 0 : Angle = 0 : EndIf
ProcedureReturn Angle*180/#PI
EndProcedure
OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
CreateSprite(1, 64, 64, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
Line(63,0,-64,32,$FFFFFF)
Line(63,63,-64,-32,$FFFFFF)
StopDrawing()
CreateSprite3D(1,1)
x = 300
y = 400
Repeat
WindowEvent()
ClearScreen(0)
Start3D()
RotateSprite3D(1, Angle(x-MouseX(),y-MouseY()), 0)
DisplaySprite3D(1, x-32, y-32)
Stop3D()
StartDrawing(ScreenOutput())
DrawingMode(1)
Circle(MouseX(), MouseY(), 5, $00FFFF)
StopDrawing()
FlipBuffers()
ExamineMouse()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape) : End : EndIf
ForEver
Hier Link zum gleichen Thema:
Winkel zu einem Punkt bekommen
Du kannst auch Angle(MouseX()-x,MouseY()-y) machen oder noch mal 90 addierne, jenadem wie dein Sprite Orientiert ist.
Re: Winkelberechnung
Verfasst: 24.04.2010 11:11
von MoonWolf
Danke!! Ich hatte nen kleinen Fehler gemacht. Deshalb gings nich.

Re: Winkelberechnung
Verfasst: 24.04.2010 12:06
von Schlumpf
Vielleicht sollte mal jemand dieses Smily aus dem Angebot entfernen, die Meisten scheinen nicht zu verstehen was es bedeutet.
Re: Winkelberechnung
Verfasst: 24.04.2010 14:39
von rolaf
Schlumpf hat geschrieben:Vielleicht sollte mal jemand dieses Smily aus dem Angebot entfernen, die Meisten scheinen nicht zu verstehen was es bedeutet.
„Ich bin mit einem Idioten unterwegs“ <- Sind wir das nicht irgendwie alle.

Re: Winkelberechnung
Verfasst: 25.04.2010 15:19
von hörmi
DrFalo hat geschrieben:„Ich bin mit einem Idioten unterwegs“ <- Sind wir das nicht irgendwie alle.

Jaaa
