#python #pygame #rotation
#питон #pygame #вращение
Вопрос:
я новичок в программировании, поэтому я следую некоторым онлайн-урокам, чтобы создать базовую игру. чтобы создать движение для моего персонажа, я следовал этому руководству https://www.youtube.com/watch?v=4aZe84vvE20amp;t=692samp;ab_channel=ClearCode после просмотра вращающейся части видео я попытался протестировать его. однако по какой-то причине это не работает. я не уверен, почему это так. я не получаю сообщение об ошибке, но символ остается на одном месте и не вращается, как только я нажимаю клавиши со стрелками влево и вправо. может кто-нибудь взглянуть на мой код и сообщить мне, что я сделал не так? большое спасибо
import pygame
pygame.init()
window = pygame.display.set_mode((650, 650))
pygame.display.set_caption ("Game")
green = (0,255,0)
window.fill(green)
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.og_image = pygame.image.load("player1.png")
self.image = self.og_image
self.rect = self.image.get_rect (center = (345,345))
self.angle = 0
self.rotate_speed = 1
self.direction = 0
def rotate(self):
if self.direction == 1:
self.angle -= self.rotate_speed
print(self.angle)
elif self.direction == -1:
self.angle = self.rotate_speed
print(self.angle)
self.image = pygame.transform.rotozoom(self.og_image, self.angle, 1)
self.rect = self.image.get_rect(center = (self.rect.center))
def update(self):
self.rotate()
player_1 = Player()
players = pygame.sprite.GroupSingle()
players.add(player_1)
players.draw(window)
run = True
while run == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
players.sprite.direction = 1
if event.key == pygame.K_LEFT:
players.sprite.direction -= 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
players.sprite.direction -= 1
if event.key == pygame.K_LEFT:
players.sprite.direction = 1
players.update()
pygame.display.update()
pygame.quit()
Комментарии:
1. Мне очень жаль. Последние несколько дней я был занят. Мы надеемся вернуться к нему в ближайшие дни. Спасибо за помощь.
Ответ №1:
Вы должны нарисовать спрайты в группе ( players.draw(window)
) и очистить отображение ( window.fill(green)
) перед рисованием объектов. Обратите внимание, что вы должны делать это в цикле приложения, а не в цикле событий (это вопрос отступа).:
run = True
while run == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
players.sprite.direction = 1
if event.key == pygame.K_LEFT:
players.sprite.direction -= 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
players.sprite.direction -= 1
if event.key == pygame.K_LEFT:
players.sprite.direction = 1
# INDENTATION
#<--|
players.update()
window.fill(green)
players.draw(window)
pygame.display.update()