Winkelberechnung

Für allgemeine Fragen zur Programmierung mit PureBasic.
MoonWolf
Beiträge: 17
Registriert: 31.07.2009 15:03

Winkelberechnung

Beitrag 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!!! /:->
Zuletzt geändert von MoonWolf am 24.04.2010 10:43, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Winkelberechnung

Beitrag 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!
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
MoonWolf
Beiträge: 17
Registriert: 31.07.2009 15:03

Re: Winkelberechnung

Beitrag von MoonWolf »

ok danke. aber das funktionniert trotzdem nich richtig.
PB Version ist 4.31
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Winkelberechnung

Beitrag 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.
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
MoonWolf
Beiträge: 17
Registriert: 31.07.2009 15:03

Re: Winkelberechnung

Beitrag von MoonWolf »

Danke!! Ich hatte nen kleinen Fehler gemacht. Deshalb gings nich. :iamwithstupid:
Benutzeravatar
Schlumpf
Beiträge: 19
Registriert: 21.03.2010 00:52
Wohnort: Der Puff von Schlumpfhausen

Re: Winkelberechnung

Beitrag von Schlumpf »

Vielleicht sollte mal jemand dieses Smily aus dem Angebot entfernen, die Meisten scheinen nicht zu verstehen was es bedeutet.
PB 4.41 - Win XP pro
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Winkelberechnung

Beitrag 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:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: Winkelberechnung

Beitrag von hörmi »

DrFalo hat geschrieben:„Ich bin mit einem Idioten unterwegs“ <- Sind wir das nicht irgendwie alle. :lol:
Jaaa :iamwithstupid: Bild
BildBild Bild
Antworten