如何解决Pygame:blit 的目标位置无效
首先,让我先说我是 Python 初学者,只编写了几个程序,所以这段代码可能看起来很乱。我试图通过制作一个小型吃豆子游戏作为礼物送给我的狗作为玩家和鬼魂的家庭成员来熟悉 pygame。 我无法将图像 blitting 到主循环中由 rocky.draw() 调用的矩形上(我的狗的名字是岩石)。我尝试了多种解决方案。第一个是移除 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)
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,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))
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))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。