在pygame中更改图像

时间:2016-11-26 00:32:48

标签: python-2.7 pygame

我正在为学校制作一款迷你RPG游戏。我试图对它进行编码,以便图像更改,但我的代码不起作用。我查看过很多文章,但我没有为我的案例找到一个有效的解决方案。我在特定区域做错了什么,或者我是否以完全不正确的角度启动了代码?非常感谢帮助。

import pygame

pygame.init()

width = 800
height = 600

black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

gameDisplay = pygame.display.set_mode((width, height))
pygame.display.set_caption('8Bit Adventure Time!')
clock = pygame.time.Clock()

finnImg = [pygame.image.load('AdvManRight.png'), pygame.image.load('AdvManLeft.png')]
finnImg_current = finnImg[0]

finnwidth = 115
finnheight = 201

def Finn(x, y):
    gameDisplay.blit(finnImg_current, (x, y))

def game_loop():

    x = ((width/2) - (finnwidth/2))
    y = ((height/2) - (finnheight/2))


    gameExit = False

    while not gameExit:

        x_change = 0
        y_change = 0

        gameDisplay.fill(white)
        Finn(x,y)

        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    finnImg_current = finnImg[0]
                    pygame.display.update() #the image is supposed to change here, but nothing happens...
                    x_change = -40
                if event.key == pygame.K_RIGHT:
                    finnImg_current = finnImg[1]
                    pygame.display.update() #the image is supposed to change here, but nothing happens...
                    x_change = 40
                if event.key == pygame.K_UP:
                    y_change = -40
                if event.key == pygame.K_DOWN:
                    y_change = 40

        x += x_change
        y += y_change

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

game_loop()
pygame.quit()
quit()

1 个答案:

答案 0 :(得分:0)

你有一个全局变量finnImg_current,当你拨打Finn(x, y)时,它就是屏幕上的blit。但是在你的游戏循环中,你创建了一个名为finnImg_current的局部变量。这些是不同的!

要解决此问题,您只需在功能global finnImg_current顶部输入game_loop即可。此外,pygame.display.update()只应在游戏循环中调用一次,最好是在游戏循环结束时调用。

在编写代码时尝试遵循PEP8约定,这使其他程序员更容易阅读它。基本上,变量和函数应使用lowercase_and_underscore命名,使用CamelCase命名。尽量不要混淆这些,因为它会让人感到困惑。