当前位置: 首页 > 知识库问答 >
问题:

Win.blit参数必须是表面而不是元组,但它是一个运行的精灵?

扶隐水
2023-03-14

我有一个精灵和正常运行的左右精灵。我为我的玩家设置了一个类,但每当我尝试向左或向右奔跑时,我都会出现一个错误,上面写着:

win.blit(walkleet[self.walkCount//3],(self.x,self.y))类型错误:参数1必须是pygame.Surface,而不是元组“”

我试图把表面放在那里,但这似乎也没有改变任何事情。很抱歉这个基本的问题,我对python非常陌生。这是完整的代码。

import pygame

pygame.init()
screenwidth = 500
screenheight = 500
win = pygame.display.set_mode((screenwidth, screenheight))
pygame.display.set_caption('First Game')


bkg = pygame.image.load('2.jpg')
char1 = pygame.image.load('guy.png')
char1 = pygame.transform.scale(char1, (100, 100))
walkLeft = pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R5.png'), pygame.image.load('R6.png'), pygame.image.load('R7.png'),
pygame.image.load('R8.png'), pygame.image.load('R9.png'), pygame.image.load('R10.png'), pygame.image.load('R11.png'), pygame.image.load('R12.png')
walkRight = pygame.image.load('L1.png'), pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L5.png'), pygame.image.load('L6.png'), pygame.image.load('L7.png'),
pygame.image.load('L8.png'), pygame.image.load('L9.png'), pygame.image.load('L10.png'), pygame.image.load('L11.png'), pygame.image.load('L12.png')
GameO = pygame.image.load('GO.jpg')


clock = pygame.time.Clock()


class player(object):
    def __init__(self, x ,y, width, height):


        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.GameOver = False
        self.vel = 5
        self.walkCount = 0
        self.left = False
        self.right = False
    def draw(self, win):
        if self.walkCount + 1 >= 36:
            self.walkCount = 0
        if self.left:
            win.blit(walkLeft,[self.walkCount // 3], (self.x, self.y))
            self.walkCount += 1
        elif self.right:
            win.blit(walkRight,[self.walkCount // 3], (self.x, self.y))
            self.walkCount += 1
        else:
            win.blit(char1, (self.x, self.y))


def redrawgamewindow():
    win.blit(bkg, (0, 0))
    man.draw(win)
    pygame.display.update()

man = player(250, 400, 100, 100)
run = True
while run:
    #Setting fps
    clock.tick(36)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                run = False
    #Getting keys pressed
    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and man.x > man.vel:
        man.x -= man.vel
        man.left = True
        man.right = False

    elif keys[pygame.K_RIGHT] and man.x < 500 - man.vel - man.width:
        man.x += man.vel
        man.left = False
        man.right = True

    else:
        man.left = False
        man.right = False
        man.walkCount = 0

    redrawgamewindow()

共有1个答案

爱博达
2023-03-14

这是个打字错误。在不应该出现的地方有一个逗号(walkRight[self.walkCount//3]):

win.blit(walkRight[self.walkCount//3],(self.x,self.y))

win.blit(walkRight.[self.walkCount // 3], (self.x, self.y))
 类似资料:
  • 我想先说一下,我确实查过这个问题,但每个似乎有类似问题的人都找到了一个不适合我的解决方案。我正在使用Python3.4.3 64位和pygame 1.9.2a,并在标题中说明了错误。目前我的代码如下所示: 运行它给了我以下信息: 提前谢谢,如果这听起来像个愚蠢的问题,我很抱歉。 编辑:多亏了布莱恩,这个问题现在已经解决了。对于任何有类似问题的人来说,以后可能会看到这个,更正后的版本是这样的: 关键

  • 我一直在遵循的python flappy鸟AI教程从techwith timm,我得到了这个错误; 我的代码是这样的 我读过其他文章也有同样的问题,我理解,但是不是像那样的列表。我不知道该怎么办。 我试着做来获取“列表”的第一个图像,但它说对象不是列表。为什么?

  • 我正在编写一个小型python游戏,我的一些代码似乎不起作用。看一看: 是啊......所以错误是:

  • 问题内容: 我正在努力使机器人围绕8 x 8的2d网格室移动,其中一部分正在初始化传感器,该传感器由围绕机器人的最近5个瓦片组成。 在这里,我创建了一个由5个元素组成的数组。 但是当我尝试像这样设置传感器的值时: 我得到“列表索引必须是整数,而不是元组”的错误。 问题答案: 您说的是一个“二维网格”-我假设它是一个列表列表。在这种情况下,您应该以以下方式访问其元素 而不是用该对索引外部列表。

  • 我有一个问题,我做了一个乒乓游戏,但我有一个问题,把分数打印到pyplay窗口。 我得到错误'TypeError:参数1必须是pygame.Surface,而不是str 我在文本中输入了blit,但出现了一个错误。我知道代码乱七八糟,我稍后会修复它