我试图在 Python 中使用命令 context.rotate(angle) 在 JS 中模拟一些可用的行为。
我有以下代码: import pygame import math import numpy as np
pygame.init()
CLOCK = pygame.time.Clock()
RED = pygame.color.THECOLORS['red']
WHITE = pygame.color.THECOLORS['white']
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
screen_width, screen_height = screen.get_size()
surface = pygame.Surface((50, 50), pygame.SRCALPHA)
surface.fill((0, 0, 0))
rotated_surface = surface
rect = surface.get_rect()
ax = int(screen_width / 2)
ay = int(screen_height / 2)
angle = 0
print("Size of the screen ({}, {})".format(screen_width, screen_height))
print("Center of the screen ({}, {})".format(ax, ay))
myfont = pygame.font.SysFont("monospace", 12)
pygame.display.set_caption("Test rotate")
main_loop = True
amplifier = 200
def calculate_angle(mouse_position):
dx = mouse_position[0] - ax
dy = mouse_position[1] - ay
return np.arctan2(dy,dx)
while main_loop:
for event in pygame.event.get():
keys = pygame.key.get_pressed()
if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:
main_loop = False
pos = pygame.mouse.get_pos()
angle = (calculate_angle(pos) * 180)/math.pi
screen.fill((255,255,255))
rotated_surface = pygame.transform.rotate(surface, -angle)
rect = rotated_surface.get_rect(center = (ax, ay))
screen.blit(rotated_surface, (rect.x, rect.y))
pygame.draw.line(rotated_surface, WHITE, (ax,ay), (ax+20, ay), 1)
pygame.draw.line(rotated_surface, WHITE, (ax+10,ay-10), (ax+20, ay), 1)
pygame.draw.line(rotated_surface, WHITE, (ax+10,ay+10), (ax+20, ay), 1)
pygame.display.update()
CLOCK.tick(30)
pygame.quit()
我正在绘制一个箭头并希望根据鼠标在屏幕上的位置旋转它。我当然可以在每次进行一些正弦、余弦计算时重新绘制线条,但这很痛苦。我认为表面可以在这里帮助我,事实上,它适用于完美旋转的矩形。但是将我的线条画到表面上是行不通的。
所以,我想我误解了表面的用途,或者我编码错误,有更好的方法来做到这一点。请注意,如果我在我的 draw.line 指令中用 screen 替换了 Rodated_surface,箭头确实会在屏幕上绘制,但永远不会旋转。
有什么想法(除了使用图像/精灵;))?
忽然笑
相关分类