微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

谁能帮我解决这个 pygame TypeError 我的代码?

如何解决谁能帮我解决这个 pygame TypeError 我的代码?

你好,我是堆栈溢出和 python 的新手,我需要一些帮助来解决这个编码错误。我跟着技术与蒂姆关于创建精灵运动的教程,当我移动精灵时遇到错误消息。 这是我关注的视频的链接https://www.youtube.com/watch?v=UdsNBIzsmlI

跳跃运动似乎有效,但当我将角色/精灵向左/向右移动超过 3 步时,我收到一条错误消息。 这是我收到的错误消息:

Traceback (most recent call last):
  File "C:\Users\Desktop\PYGAME Folder\Game Code.py",line 90,in <module>
    redrawGameWindow()
  File "C:\Users\Desktop\PYGAME Folder\Game Code.py",line 40,in redrawGameWindow
    win.blit(walkRight[walkCount//3],(x,y))
TypeError: argument 1 must be pygame.Surface,not str

以下是使用 Tech 和 Tim 示例的代码

import pygame
pygame.init()

win = pygame.display.set_mode((500,480))
pygame.display.set_caption("First Game")

walkRight = [pygame.image.load('R1.png'),('R2.png'),('R3.png'),('R4.png'),('R5.png'),('R6.png'),('R7.png'),('R8.png'),('R9.png')]
walkLeft = [pygame.image.load('L1.png'),('L2.png'),('L3.png'),('L4.png'),('L5.png'),('L6.png'),('L7.png'),('L8.png'),('L9.png')]
bg = pygame.image.load('bg.jpg')
char = pygame.image.load('standing.png')

x = 50
y = 400
width = 40
height = 60
vel = 5

clock = pygame.time.Clock()

isJump = False
jumpCount = 10

left = False
right = False
walkCount = 0

def redrawGameWindow():
    global walkCount
    
    win.blit(bg,(0,0))  
    if walkCount + 1 >= 27:
        walkCount = 0
        
    if left:  
        win.blit(walkLeft[walkCount//3],y))
        walkCount += 1                          
    elif right:
        win.blit(walkRight[walkCount//3],y))
        walkCount += 1
    else:
        win.blit(char,y))
        walkCount = 0
        
    pygame.display.update() 
    


run = True

while run:
    clock.tick(27)

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

    keys = pygame.key.get_pressed()
    
    if keys[pygame.K_LEFT] and x > vel: 
        x -= vel
        left = True
        right = False

    elif keys[pygame.K_RIGHT] and x < 500 - width - vel:  
        x += vel
        left = False
        right = True
        
    else: 
        left = False
        right = False
        walkCount = 0
        
    if not(isJump):
        if keys[pygame.K_SPACE]:
            isJump = True
            left = False
            right = False
            walkCount = 0
    else:
        if jumpCount >= -10:
            y -= (jumpCount * abs(jumpCount)) * 0.5
            jumpCount -= 1
        else: 
            jumpCount = 10
            isJump = False

    redrawGameWindow() 
    
    
pygame.quit()

解决方法

walkRight中,实际只加载了第一张图片。其他的只是文件名。 walkLeft 也存在同样的问题。 看看这是否能解决问题:

walkRight = [pygame.image.load(i) for i in ['R1.png','R2.png','R3.png','R4.png','R5.png','R6.png','R7.png','R8.png','R9.png']]

为了更简洁的代码,试试这个:

walkRight = [pygame.image.load("R%d.png"%i) for i in range(1,10)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。