Как правильно повернуть спрайт при нажатии левой кнопки мыши?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно повернуть спрайт при нажатии левой кнопки мыши?

Сообщение Anonymous »

Я разрабатываю игру RTS на Python, используя библиотеку Pyglet.
Спрайт вращается в диапазоне от -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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»