Спрайт вращается в диапазоне от -180 до 180 градусов.
Спрайт не может правильно вращаться от -179 до 179, он вращается по часовой стрелке, вплоть до 179, минуя 0, вместо того, чтобы вращаться против часовой стрелки и достигать 179 всего за 2 градуса.

Спрайт
[img]https:// i.sstatic.net/eAUVr9Cv.jpg[/img]
from math import trunc, degrees, atan2
from pyglet.app import run
from pyglet.clock import schedule_interval
from pyglet.window import Window
from pyglet.graphics import Batch
from pyglet.sprite import Sprite
from pyglet.image.codecs.png import PNGImageDecoder
from pyglet.window import mouse
from pyglet.image import load
from pyglet.text import Label
from pyglet.canvas import Display
class MAIN(Window):
def __init__(self):
window_width = Display().get_default_screen().width // 2
window_height = Display().get_default_screen().height // 2
super().__init__(window_width, window_height)
self.batch = Batch()
self.sptiteWidth, self.spriteHeight = 100, 100
# SPRITE
image = load('img/sprite.png', decoder=PNGImageDecoder())
image.anchor_x, image.anchor_y = self.sptiteWidth // 2, self.spriteHeight // 2
self.sprite = Sprite(image, x = window_width // 2, y = window_height // 2, batch=self.batch)
self.angle = 0
self.rotate = False
# LABEL
self.label = Label(
color=(255, 255, 255),
font_name ='Times New Roman',
font_size = 22,
x = self.width // 2, y = self.height // 4,
anchor_x ='center', anchor_y ='center')
def update(self, dt):
self.label.text = f'MOUSE ANGLE: {self.angle} || SPRITE ANGLE: {self.sprite.rotation}'
if self.rotate:
rotationSpeed = 1
if self.sprite.rotation != self.angle:
if self.sprite.rotation < self.angle:
self.sprite.rotation += rotationSpeed
else:
self.sprite.rotation -= rotationSpeed
def on_mouse_press(self, x, y, button, modifiers):
if button == mouse.LEFT:
self.angle = trunc(degrees(atan2(x - self.sprite.x, y - self.sprite.y)))
# if self.angle < 0:
# self.angle += 360
self.rotate = True
def on_draw(self):
self.clear()
self.batch.draw()
self.label.draw()
if __name__ == "__main__":
fps = 60
main = MAIN()
schedule_interval(main.update, 1 / fps)
run()
Подробнее здесь: https://stackoverflow.com/questions/792 ... tton-click