Попытка сделать так, чтобы при прыжке показывался список изображений анимации прыжка. У меня есть спрайты прыжка, разделенные пополам. Одна половина анимации идет вверх, а другая идет вниз. Тем не менее, когда я прыгаю лицом вправо, изображение просто идет поверх моей оригинальной анимации движения. Когда я смотрю налево и прыгаю, изображение немного левее по анимации движения. Любые советы, как я могу это исправить?
import pygame
pygame.init()
win = pygame.display.set_mode((500,500))
walkRight = [pygame.image.load('cropped_run/walk1.png'), pygame.image.load('cropped_run/walk2.png'), pygame.image.load('cropped_run/walk3.png'), pygame.image.load('cropped_run/walk4.png'), pygame.image.load('cropped_run/walk5.png'), pygame.image.load('cropped_run/walk6.png')]
walkLeft = [pygame.image.load('cropped_run/l_walk.png'), pygame.image.load('cropped_run/l_walk2.png'), pygame.image.load('cropped_run/l_walk3.png'), pygame.image.load('cropped_run/l_walk4.png'), pygame.image.load('cropped_run/l_walk5.png'), pygame.image.load('cropped_run/l_walk6.png')]
bg = pygame.image.load('bg/bg.png')
fire = [pygame.image.load('attack/fire1.png'),pygame.image.load('attack/fire2.png'),pygame.image.load('attack/fire3.png'),pygame.image.load('attack/fire4.png'),pygame.image.load('attack/fire5.png'),pygame.image.load('attack/fire6.png'),pygame.image.load('attack/fire7.png'),pygame.image.load('attack/fire8.png'),pygame.image.load('attack/fire9.png'),]
jumpUp = [pygame.image.load('jump/jump1.png'),pygame.image.load('jump/jump2.png'),pygame.image.load('jump/jump3.png')]
jumpDown = [pygame.image.load('jump/jump4.png'),pygame.image.load('jump/jump5.png'),pygame.image.load('jump/jump6.png'),pygame.image.load('jump/jump7.png')]
clock = pygame.time.Clock()
pygame.display.set_caption('Platform RPG')
class Player:
def __init__(self, x, y, width, height):
self.x = x
self.y = y
self.width = width
self.height = height
self.vel = 5
self.isJump = False
self.jumpCount = 8
self.left = False
self.right = False
self.walkCount = 0
self.standing = True
def draw(self, win):
if self.walkCount + 1 >= 27:
self.walkCount = 0
if not (self.standing):
if self.right:
win.blit(walkRight[self.walkCount//6], (self.x,self.y))
self.walkCount += 1
elif self.left:
win.blit(walkLeft[self.walkCount//6], (self.x,self.y))
self.walkCount += 1
else:
if self.right:
win.blit(walkRight[0], (self.x,self.y))
else:
win.blit(walkLeft[0], (self.x,self.y))
#JUMP ANIMATION RENDER
if self.isJump:
if self.jumpCount >= -8:
win.blit(jumpUp[self.jumpCount//3], (self.x,self.y))
else:
win.blit(jumpDown[self.jumpCount//3], (self.x,self.y))
class Projectile:
def __init__(self, x, y, radius, color, facing):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.facing = facing
self.vel = 8 * facing
def draw(self, win):
win.blit(fire[self.vel//9], (self.x,self.y))
def redraw():
win.blit(bg, (0,0))
player.draw(win)
for bullet in bullets:
bullet.draw(win)
pygame.display.update()
#mainloop
player = Player(50, 425, 64, 64)
bullets = []
run = True
while run:
clock.tick(5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
keys = pygame.key.get_pressed()
#PROJECTILES
if keys[pygame.K_SPACE]:
if player.left:
facing = -1
else:
facing = 1
if len(bullets) < 5:
bullets.append(Projectile(round(player.x + player.width//4), round(player.y + player.height//4), 6, (0,0,0), facing))
#MOVEMENT
if keys[pygame.K_LEFT] and player.x > player.vel:
player.x -= player.vel
player.left = True
player.right = False
player.standing = False
elif keys[pygame.K_RIGHT] and player.x < 436:
player.x += player.vel
player.left = False
player.right = True
player.standing = False
else:
player.standing = True
player.walkCount = 0
#JUMP CHECK
if not (player.isJump):
if keys[pygame.K_UP]:
player.isJump = True
player.walkCount = 0
else:
if player.jumpCount >= -8:
neg = 1
if player.jumpCount < 0:
neg = -1
player.y -= (player.jumpCount ** 2) * 0.5 * neg
player.jumpCount -= 1
else:
player.isJump = False
player.jumpCount = 8
redraw()
pygame.quit()