benötigten Winkel für rotesprite errechnen lassen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

der winkel bei rotatesprite hat sich auch im laufe der zeit geändert...
ich meine, bis 3.92 war die 0 rechts, ab 3.94 oben oder irgendwie sowas...

mach halt mal probedrehungen, um zu ermitteln, welche winkel du überhaupt wo brauchst...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

#NULL hat geschrieben:da du die vorzeichen der differenzen ja gesonderst untersuchst, musst du sie innerhalb von aTan() ignorieren.
--> ATan( Abs(gegenkathete) / Abs(ankathete) )

[ich weiß aber nich wie riskant die Abs()-funktionm mit integern is.]
VORSICHT ! Dieses Abs() wäre an dieser Stelle völlig falsch, das was ich geschrieben haben und von Ghost leicht verändert ist schon richtig.


@ Ghost

ja kannst die "al-180" ruhig hinten ran hängen, vielleicht sind auch deine Bilder falsch ausgerichtet.
Mein Code war für für nach oben ausgerichtete Bilder und für den Fall das 0° rechts ist und 90° dann unten.

Aber es liegt bestimmt daran, das du Mouse...() mit player... vertauscht hast.
Tausch die mal so dann gehts bestimmt :

Code: Alles auswählen

b.f = 3.14159265/180 
al.f = ATan((playery-MouseY())/(playerx-MouseX()))/b 
  If MouseX()-Playerx < 0 : al = al + 180 : EndIf 
  If Mousex()-Playerx = 0 : 
   If (MouseY()-Playery)<0 : al = -90 : EndIf 
   If (MouseY()-Playery)>0 : al = 90 : EndIf 
  EndIf 
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
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

stimmt so funktioniert es (mouse mit player vertauschen)

Danke an allen <)
(nutze v. 3.3)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nochn tip:
benutze nur einmal MouseX() und MouseY() am anfang der Hauptschleife und steck das ergebnis in Variablen.

also für diesen abschnitt:

Code: Alles auswählen

b.f = 3.14159265/180 
...
Repeat  ; Hauptschleife
  ...
  MauX = MouseX() : MauY = MouseY()
  ...
  al.f = ATan((playery-MauY)/(playerx-MauX))/b 
  If MauX-Playerx < 0 : al = al + 180 : EndIf 
  If MauX-Playerx = 0 : 
   If (MauY-Playery)<0 : al = -90 : EndIf 
   If (MauY-Playery)>0 : al = 90 : EndIf 
  EndIf 
  ...
Until Hauptschleifenende = #True
1. Du wirst sie nicht nur für diese Rechnung, sondern noch öfters brauchen.
Weniger Funktionsaufrufe => mehr Performance

2. Du fragst die Koordinaten nur an genau einem Zeitpunkt ab,
damit stellst du sicher, dass alle deine Rechnungen zueinander korrekt sind,
auch wenn der Player die Maus extrem schnell bewegt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten