首页 > 解决方案 > 我在 Pygame 中使用 .blit() 做错了什么?

问题描述

我最近一直在尝试学习 Pygame,但遇到了一些麻烦。一件事是我根本无法显示图像。我尝试了很多不同的方法,但最接近的是收到此错误消息,

TypeError: argument 1 must be pygame.Surface, not function

尝试使用时.blit()。我在教程中看到过以这种方式使用的命令,但由于某种原因,它对我不起作用。我的代码如下。

Python 3.8、Spyder、macOS 10.14.6

import pygame as pg
pg.init()

width = 800
height = 600

white = ((255, 255, 255))
purple = ((100, 0, 130))

screen = pg.display.set_mode((width, height))
pg.display.set_caption("Race Game:")
clock = pg.time.Clock()

car = pg.image.load("car.png") 

def car(x, y):
    screen.blit(car, (x, y))

x = width * 0.45
y = height * 0.8

crashed = False
while not crashed:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            crashed = True

    screen.fill(white)
    car(x, y)
    pg.display.update() 
    clock.tick(60)

pg.quit()
quit

标签: pythonpygame

解决方案


pygame.Surface 对象和函数具有相同的名称car

car = pg.image.load("car.png") 

def car(x, y):
   screen.blit(car, (x, y))

该函数car涵盖car导致错误的变量。当你 screen.blit(car, (x, y))在函数中做时car,则car指的是函数car而不是pygame.Surface对象car

您必须使用不同的名称。例如:

car_image = pg.image.load("car.png") 

def car(x, y):
    screen.blit(car_image, (x, y))

推荐阅读