Я пытаюсь сделать игру на питоне, используя pygame, которая состоит из танков, стреляющих друг в друга.У меня проблема: когда я пытаюсь повернуть спрайт на 90 градусов, он движется слишком быстро, и мне нужно, чтобы он был таким, чтобы после нажатия кнопки он наклонялся на 90 градусов, а затем мог двигаться в этом направлении
Я уже пробовал использовать операторы if с true и false, но это все равно заставляет его слишком быстро наклоняться, когда предполагается, что он остановится на 90 градусов.
Функция обновления в основном добавляет скорость кфункция position и draw выводит объект на экран в зависимости от того, какие позиции у объекта.
Вот фрагмент кода:
class Tank:
def __init__(self, x, y, pic):
self.xpos = x
self.ypos = y
self.speed_x = 0
self.speed_y = 0
self.picture = pic
self.rotation_angle = 0
self.rotation_angle_speed = 0
self.rect = self.picture.get_rect()
def update(self):
self.xpos =+ self.speed_x
self.ypos =+ self.speed_y
self.rotation_angle =+ self.rotation_angle_speed
def rotate(self):
self.picture = pygame.transform.rotate(self.picture, self.rotation_angle)
def draw(self):
screen.blit(self.picture, (self.xpos, self.ypos))
def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)
one_tank = pygame.image.load("C:/aliens/tank_two.png").convert_alpha()
one_tank = pygame.transform.scale(one_tank, (100, 100))
tank_one = Tank(100, 100, one_tank)
level = Level_background(0, 0, level_pic)
one_right = False
one_left = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
tank_one.speed_y = -5
elif event.key == pygame.K_s:
tank_one.speed_y = 5
elif event.key == pygame.K_a:
tank_one.speed_x = -5
elif event.key == pygame.K_d:
tank_one.speed_x = 5
elif event.key == pygame.K_q:
if one_left == False:
tank_one.rotation_angle_speed = -90
one_left = True
elif event.key == pygame.K_e:
if one_right == False:
tank_one.rotation_angle_speed = 90
one_right = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_w:
tank_one.speed_y = 0
elif event.key == pygame.K_s:
tank_one.speed_y = 0
elif event.key == pygame.K_a:
tank_one.speed_x = 0
elif event.key == pygame.K_d:
tank_one.speed_x = 0
elif event.key == pygame.K_q:
if one_left == True:
tank_one.rotation_angle_speed = 0
one_left = False
elif event.key == pygame.K_e:
if one_right == True:
tank_one.rotation_angle_speed = 0
one_right = False
tank_one.update()
level.draw()
tank_one.rotate()
tank_one.draw()
pygame.display.flip()
clock.tick(60)
Что я ожидал бы сделатьбудет наклоняться на 90 градусов и оставаться таким до тех пор, пока кнопка не будет нажата снова.Но вместо этого он просто решает отклониться на угол более 90 градусов