我正在为学校制作一款迷你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()
答案 0 :(得分:0)
你有一个全局变量finnImg_current
,当你拨打Finn(x, y)
时,它就是屏幕上的blit。但是在你的游戏循环中,你创建了一个名为finnImg_current
的局部变量。这些是不同的!
要解决此问题,您只需在功能global finnImg_current
顶部输入game_loop
即可。此外,pygame.display.update()
只应在游戏循环中调用一次,最好是在游戏循环结束时调用。
在编写代码时尝试遵循PEP8约定,这使其他程序员更容易阅读它。基本上,变量和函数应使用lowercase_and_underscore
命名,使用CamelCase
命名。尽量不要混淆这些,因为它会让人感到困惑。