首先,让我先说我是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()发布于 2021-02-10 09:40:51
你需要在屏幕上给surface.blit一个目的地。为blit函数传递的参数为:
blit(source, dest, area=None, special_flags=0)您正在尝试将类型Rocky()指定为参数dest (元组目标)。
我不确定你的意图,但是要画rockimg,你需要给它坐标。
这里有一个例子供大家参考:
surface.blit(rockimg, (250, 250))https://stackoverflow.com/questions/66129592
复制相似问题