Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能帮我解决我在代码中遇到的这个pygame类型错误吗?_Python_Pygame - Fatal编程技术网

Python 有人能帮我解决我在代码中遇到的这个pygame类型错误吗?

Python 有人能帮我解决我在代码中遇到的这个pygame类型错误吗?,python,pygame,Python,Pygame,您好,我是堆栈溢出和python新手,我需要一些关于我遇到的这个编码错误的帮助。我跟随了Tim关于创建精灵移动的教程,当我移动精灵时,我遇到了一条错误消息。 以下是我关注的视频链接: 跳跃运动似乎正在工作,但当我将角色/精灵向左/向右移动超过3步时,会收到错误消息。 以下是我收到的错误消息: Traceback (most recent call last): File "C:\Users\Desktop\PYGAME Folder\Game Code.py", lin

您好,我是堆栈溢出和python新手,我需要一些关于我遇到的这个编码错误的帮助。我跟随了Tim关于创建精灵移动的教程,当我移动精灵时,我遇到了一条错误消息。 以下是我关注的视频链接:

跳跃运动似乎正在工作,但当我将角色/精灵向左/向右移动超过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
回溯(最近一次呼叫最后一次):
文件“C:\Users\Desktop\PYGAME Folder\Game Code.py”,第90行,在
重画游戏窗口()
重画游戏窗口中第40行的文件“C:\Users\Desktop\PYGAME Folder\Game Code.py”
win.blit(walkRight[walkCount//3],(x,y))
TypeError:参数1必须是pygame.Surface,而不是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], (x,y))
        walkCount += 1                          
    elif right:
        win.blit(walkRight[walkCount//3], (x,y))
        walkCount += 1
    else:
        win.blit(char, (x, 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()
导入pygame
pygame.init()
win=pygame.display.set_模式((500480))
pygame.display.set_标题(“第一场游戏”)
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
宽度=40
高度=60
水平=5
clock=pygame.time.clock()
isJump=False
跳数=10
左=假
右=假
步行次数=0
def重画游戏窗口():
全局步行计数
温·布利特(背景,(0,0))
如果walkCount+1>=27:
步行次数=0
如果留下:
blit(walkLeft[walkCount//3],(x,y))
步行次数+=1
埃利夫权利:
win.blit(walkRight[walkCount//3],(x,y))
步行次数+=1
其他:
win.blit(char,(x,y))
步行次数=0
pygame.display.update()
运行=真
运行时:
时钟滴答作响(27)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
如果键[pygame.K_LEFT]和x>vel:
x-=水平
左=真
右=假
elif键[pygame.K_RIGHT]和x<500-宽度-级别:
x+=vel
左=假
右=真
其他:
左=假
右=假
步行次数=0
如果不是(isJump):
如果键[pygame.K_SPACE]:
isJump=True
左=假
右=假
步行次数=0
其他:
如果跳线计数>=-10:
y-=(跳数*绝对值(跳数))*0.5
跳转计数-=1
其他:
跳数=10
isJump=False
重画游戏窗口()
pygame.quit()

walkRight
中,仅实际加载第一个图像。其他的只是文件名。
walkleet
也存在同样的问题。 查看这是否解决了问题:

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)]

嘿,真管用!非常感谢你:D