анимационная картинка для прыжков - PullRequest
0 голосов
/ 26 апреля 2020

Попытка сделать так, чтобы при прыжке показывался список изображений анимации прыжка. У меня есть спрайты прыжка, разделенные пополам. Одна половина анимации идет вверх, а другая идет вниз. Тем не менее, когда я прыгаю лицом вправо, изображение просто идет поверх моей оригинальной анимации движения. Когда я смотрю налево и прыгаю, изображение немного левее по анимации движения. Любые советы, как я могу это исправить?

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...