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:

Code: Alles auswählen

Angle(player\x-MouseX(), player\Y-MouseY())
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. :iamwithstupid:

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. :lol:

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. :lol:
Jaaa :iamwithstupid: Bild