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...
benötigten Winkel für rotesprite errechnen lassen
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.#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.]
@ 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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
nochn tip:
benutze nur einmal MouseX() und MouseY() am anfang der Hauptschleife und steck das ergebnis in Variablen.
also für diesen abschnitt:
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.
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
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.
Der Weise weiß, dass er ein Narr ist.