pygame Как плавно двигать круг в произвольном направлении? Например на 110 градусов
У меня есть круг:
pygame.draw.circle(sc, ORANGE, (x, y), r)
На каждой итерации я изменяю его x или y на +1 или -1:
x += 1
y += 1
Таким образом я могу перемещать его примерно так:
\|/
-o-
/|\
Получается я могу переместить свой круг на 45, 90, 135, 180 градусов и тд
Собственно вопрос, а как же мне переместить мой круг например на 110 градусов? Если у меня поверхность состоит из пикселей (квадратов) и я могу перемещаться только, как в примере?
\|/
-o-
/|\
Просто сделать x += 1.5 Я не могу, тк pygame.draw.circle принимает только целые числа.
Эта тема очень сложна для меня и мне было сложно сформировать вопрос, но надеюсь смог объяснить правильно.
Полный код:
import pygame
def main():
WHITE = (255, 255, 255)
ORANGE = (255, 150, 100)
clock = pygame.time.Clock()
FPS = 60
WIN_WIDTH = 800
WIN_HEIGHT = 600
pygame.init()
sc = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
# радиус и координаты круга
r = 90
x = WIN_WIDTH//2
y = WIN_HEIGHT//2
while 1:
sc.fill(WHITE)
pygame.draw.circle(sc, ORANGE, (x, y), r)
pygame.display.update()
for i in pygame.event.get():
if i.type == pygame.QUIT:
return
x += 1
y -= 1
# Круг двигается на 135 градусов, а хотелось бы например на 110 градусов
clock.tick(FPS)
if __name__ == "__main__":
main()
Ответы (3 шт):
Если вы хотите медленно двигать, а принимает только целые числа, то уменьшите FPS. А так, чтобы переместить на определенное расстояние, можно использовать цикл for. К примеру
for i in range(10):
x += 1
да, вам надо манипулировать значениями x и y
import pygame
def main():
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (125, 125, 125)
LIGHT_BLUE = (64, 128, 255)
GREEN = (0, 200, 64)
YELLOW = (225, 225, 0)
PINK = (230, 50, 230)
ORANGE = (255, 150, 100)
clock = pygame.time.Clock()
FPS = 20 # 60
WIN_WIDTH = 800
WIN_HEIGHT = 600
pygame.init()
sc = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
# радиус и координаты круга
r = 10 # 90
x = WIN_WIDTH//2
y = WIN_HEIGHT//2
while 1:
sc.fill(WHITE)
pygame.draw.circle(sc, ORANGE, (x, y), r)
pygame.display.update()
for i in pygame.event.get():
if i.type == pygame.QUIT:
return
x += 1
y -= 3 # + 3 # <<<=====<
# Круг двигается на 135 градусов, а хотелось бы например на 110 градусов
# 90 + (90 - 45) = 135
# 90 + (90 - x ) = 110 x = 180 - 110 = 70
clock.tick(FPS)
if __name__ == "__main__":
main()
def move(x, y, angle, step):
new_x = x + sin(angle * pi / 180) * step
new_y = y + cos(angle * pi / 180) * step
return new_x, new_y
а при отрисовке надо будет приводить числа к целому числу int(x), int(y)

