Python Pygame:blit的目标位置无效

Python Pygame:blit的目标位置无效,python,pygame,blit,Python,Pygame,Blit,首先,让我先说一句,我是Python的初学者,只编写了几个程序,所以这段代码可能看起来很凌乱。我试图通过制作一个小的吃豆人游戏来熟悉pygame,作为一个家庭成员的礼物,我的狗作为玩家和幽灵。 在主循环中,我无法将图像快速切换到由rocky.draw()调用的rect(我的狗的名字是rocky)。我尝试了多种解决方案。第一个是删除Rocky类下的draw方法,并使用get.rect()创建rect。然而,这只会导致没有直接显示,只是在屏幕的大部分显示一个巨大的放大版本的图像。 因此,我再次使用r

首先,让我先说一句,我是Python的初学者,只编写了几个程序,所以这段代码可能看起来很凌乱。我试图通过制作一个小的吃豆人游戏来熟悉pygame,作为一个家庭成员的礼物,我的狗作为玩家和幽灵。 在主循环中,我无法将图像快速切换到由rocky.draw()调用的rect(我的狗的名字是rocky)。我尝试了多种解决方案。第一个是删除Rocky类下的draw方法,并使用get.rect()创建rect。然而,这只会导致没有直接显示,只是在屏幕的大部分显示一个巨大的放大版本的图像。 因此,我再次使用rocky.draw()并尝试将图像blit到矩形上。但是,我一直得到类型错误:blit的目标位置无效。我知道我很可能错过了一些愚蠢的事情或者误解了一些事情。非常感谢您的任何意见。谢谢大家!

代码如下:

    import pygame

    pygame.init()

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

    pygame.display.set_caption("Rock-Man")

    clock = pygame.time.Clock()

    surface = pygame.display.set_mode((500, 500))

    color = (255, 0, 0)

    rockimg = pygame.image.load('rocky1.png')

    rockimg.convert()


    class Entity:

       def __init__(self, x, y):
            self.x = x
            self.y = y


    class Rocky(Entity):
        def __init__(self):
            Entity.__init__(self, x, y)
            self.x = 0
            self.y = 0
            self.tile_size = 30

        def draw(self):
            pygame.draw.rect(surface, color, (x, y, width, height))


    rocky = Rocky()

    run = True
    while run:
        pygame.time.delay(100)

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

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            x -= vel
        if keys[pygame.K_RIGHT]:
            x += vel
        if keys[pygame.K_UP]:
            y -= vel
        if keys[pygame.K_DOWN]:
            y += vel

        surface.fill((0, 0, 0))
        rocky.draw()
        surface.blit(rockimg, rocky)

        pygame.display.flip()
        pygame.display.update()

    pygame.quit()

您需要在屏幕上为surface.blit提供一个目的地。为
blit
函数传递的参数为:

blit(source, dest, area=None, special_flags=0)
您试图将类型
Rocky()
作为参数
dest
(元组目标)

我不确定你的意图,但要画
rockimg
你需要给它坐标

以下是一个参考示例:

surface.blit(rockimg, (250, 250))

您需要在屏幕上为surface.blit提供一个目的地。为
blit
函数传递的参数为:

blit(source, dest, area=None, special_flags=0)
您试图将类型
Rocky()
作为参数
dest
(元组目标)

我不确定你的意图,但要画
rockimg
你需要给它坐标

以下是一个参考示例:

surface.blit(rockimg, (250, 250))