【问题标题】:Pygame jump animation not working - though walking isPygame 跳跃动画不起作用 - 虽然走路是
【发布时间】:2020-09-27 20:37:53
【问题描述】:

好的,所以我可以在主文件的左右添加行走动画,但是当我基本上复制/粘贴/更改名称以添加跳跃时,它不起作用。

我继续制作了我的主文件的副本,只是没有行走动画。我继续尝试只做跳跃动画,即使我复制了与行走相同的教程中的所有内容,它仍然不起作用。

从昨晚 8 点左右开始,我一直在努力解决这个问题。跳跃动画有不同的工作方式吗? THE COPY 的代码见下文,因此没有行走动画。我没有出错,玩家可以左右行走,也可以跳跃。

import pygame
import os
x = 90
y = 60
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x, y)


def player_jump_animation():
    """Adding collision block to each right jump animation"""
    new_player = player_frames_jump[player_jump_index]
    new_player_rect = new_player.get_rect(
        center=(player_rect.centerx, player_rect.centery))
    return new_player, new_player_rect


pygame.init()
screen = pygame.display.set_mode((1000, 1000))
clock = pygame.time.Clock()

player_movement = 720
isJump = False
jumpCount = 10

bg_surface = pygame.image.load('assets/camp_bg.png').convert()
bg_surface = pygame.transform.scale2x(bg_surface)

player_idle = pygame.transform.scale2x(pygame.image.load(
    'assets/IDLE_000.png').convert_alpha())

player_jump0 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_000.png').convert_alpha())
player_jump1 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_001.png').convert_alpha())
player_jump2 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_002.png').convert_alpha())
player_jump3 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_003.png').convert_alpha())
player_jump4 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_004.png').convert_alpha())
player_jump5 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_005.png').convert_alpha())
player_jump6 = pygame.transform.scale2x(
    pygame.image.load('assets/JUMP_006.png').convert_alpha())

player_frames_jump = [player_jump0, player_jump1, player_jump2,
                      player_jump3, player_jump4, player_jump5, player_jump6]

player_jump_index = 3
player_surface = player_frames_jump[player_jump_index]

player_rect = player_surface.get_rect(center=(300, 512))

PLAYERJUMP = pygame.USEREVENT
pygame.time.set_timer(PLAYERJUMP, 120)

run = True
while run:
    keys = pygame.key.get_pressed()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == PLAYERJUMP:
            if player_jump_index < 6:
                player_jump_index += 1
            else:
                player_jump_index = 0

            # Setting jump animation
            player_jump, player_rect = player_jump_animation()

    if keys[pygame.K_LEFT] and player_rect.centerx > 0 + 35:
        # If I speed up, player looks like sliding
        player_rect.centerx -= 5
    if keys[pygame.K_RIGHT] and player_rect.centerx < 1000 - 35:
        # If I speed up, player looks like sliding
        player_rect.centerx += 5

    if not(isJump):
        if keys[pygame.K_UP]:
            isJump = True
    else:
        if jumpCount >= -10:
            neg = 1
            if jumpCount < 0:
                neg = -1
            player_movement -= (jumpCount ** 2) * 0.1 * neg
            jumpCount -= 0.5
        # This will execute when jump is finished
        else:
            # Resetting Variables
            jumpCount = 10
            isJump = False

    pygame.display.update()
    clock.tick(60)

    screen.blit(bg_surface, (0, 0))
    player_rect.centery = player_movement
    screen.blit(player_idle, player_rect)


pygame.quit()

【问题讨论】:

  • 添加python标签。它将带来更多的观众,这意味着您的问题得到回答的机会更大。

标签: python animation pygame sprite


【解决方案1】:

如果玩家正在跳跃,您必须绘制player_jump 引用的Surface

while run:
    # [...]

    screen.blit(bg_surface, (0, 0))
    player_rect.centery = player_movement
    if isJump:
        screen.blit(player_jump, player_rect)
    else:
        screen.blit(player_idle, player_rect)

    # [...]

【讨论】:

  • 再次感谢您! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2023-03-09
  • 2011-03-25
  • 2012-10-13
相关资源
最近更新 更多