Python Pygame Не отображаются кадры и спрайты при передвижении игрока в право или в лево
Решил создать простую игру по видео-уроку с ютуба и столкнулся с проблемой: При зажатии клавиш вправо или в лево не отображаются кадры передвижения игрока а только кадр от начала пути и кадр конец пути. Мой код:
import pygame
from turtle import width as t_width
pygame.init()
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Cubes")
walkRight = [pygame.image.load('right_1.png'), pygame.image.load('right_2.png'), pygame.image.load('right_3.png'), pygame.image.load('right_4.png'), pygame.image.load('right_5.png'), pygame.image.load('right_6.png')]
walkLeft = [pygame.image.load('left_1.png'), pygame.image.load('left_2.png'), pygame.image.load('left_3.png'), pygame.image.load('left_4.png'), pygame.image.load('left_5.png'), pygame.image.load('left_6.png')]
bg = pygame.image.load('bg.png')
playerStand = pygame.image.load('player.png')
clock = pygame.time.Clock()
x = 50
y = 249
width = 40
height = 60
speed = 10
isJump = False
JumpCount = 10
left = False
right = False
animCount = 0
def drawWindow():
global animCount
win.blit(bg, (0, 0))
if animCount + 1 >=30:
animCount = 0
if left:
win.blit(walkLeft[animCount // 5], (x, y))
elif right:
win.blit(walkRight[animCount // 5], (x, y,))
else:
win.blit(playerStand, (x, y))
pygame.display.update()
run = True
while run:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_UP] and y > 249 and x > 375:
y -= speed
if keys[pygame.K_DOWN] and y < 440 - width - 5 and x > 380 and x < 410:
y += speed
if keys[pygame.K_LEFT] and x > 10:
x -= speed
left = True
right = False
elif keys[pygame.K_RIGHT] and x < 500 - width - 10:
x += speed
left = False
right = True
else:
left = False
right = False
animCount = 0
if not(isJump):
if keys[pygame.K_SPACE]:
isJump = True
else:
if JumpCount >= -10:
if JumpCount < 0:
y += (JumpCount ** 2) / 2
else:
y -= (JumpCount ** 2) / 2
JumpCount -= 1
else:
isJump = False
JumpCount = 10
if keys[pygame.K_ESCAPE]:
run = False
drawWindow()
Ответы (1 шт):
Потому что значение переменной animCount не изменяется. все что у тебя происходит с этой переменной, это её объявление
animCount = 0
далее она используется в условии
if animCount + 1 >=30:
animCount = 0
и в конце ты делишь по сути статичное число на цело на 5
win.blit(walkLeft[animCount // 5], (x, y))
animCount переводится как счетчик анимации. у тебя есть массив
walkRight = [pygame.image.load('right_1.png'), pygame.image.load('right_2.png'), pygame.image.load('right_3.png'), pygame.image.load('right_4.png'), pygame.image.load('right_5.png'), pygame.image.load('right_6.png')]
и animCount подразумевает, что ты будешь перебирать индексы(порядковые номера элементов в списке) массива, каждое мгновение рисуя новую картинку просто увеличивая её значение на единицу и когда значение превысит количество картинок, приравнять к нулю, чтобы начать все по новой
animCount += 1
Могу предложить тебе две вещи, если тебе нравится создавать игры и ты готов учиться(и страдать):
- книга "Учим пайтон делая крутые игры" Эл Свейгарт. не такие уж они и крутые, но в питоне помогут освоиться.
- никогда не сдавайся