Pygame 没有 blitting 图像,而是吐出类型错误

Posted

技术标签:

【中文标题】Pygame 没有 blitting 图像,而是吐出类型错误【英文标题】:Pygame not blitting image,instead spitting out type error 【发布时间】:2022-01-02 00:33:02 【问题描述】:

所以我在网上看这个关于 pygame 的教程,因为我对 pygame 非常陌生。所以他所做的就是创建一个 player() 函数,然后对其进行 blit。所以我也做了同样的事情。对他来说,他得到了完美的 blitted,但对我来说,我得到了一个类型错误。他的代码和我的代码唯一不同的是窗口的尺寸和玩家类别和颜色。我尝试在堆栈溢出中搜索它,但唯一相关的问题没有得到解答。不知道出了什么问题。

完全错误:

/home/Command Blocks/Desktop/venv/bin/python "/home/CommandBlocks/Desktop/CLASS_/Studies/Computer/python/practice/space shooter/main.py"
pygame 2.0.2 (SDL 2.0.16, Python 3.9.5)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "/home/Command Blocks/Desktop/CLASS_/Studies/Computer/python/practice/space shooter/main.py", line 33, in <module>
    player()
  File "/home/Command Blocks/Desktop/CLASS_/Studies/Computer/python/practice/space shooter/main.py", line 20, in player
    screen.blit(player, (playerX, playerY))
TypeError: argument 1 must be pygame.Surface, not function

Process finished with exit code 1

完整代码:

import pygame

#Initialize pygame module
pygame.init()

#Create Screen
screen = pygame.display.set_mode((1000, 600))

#Title and Icon
pygame.display.set_caption("Jungle Invader")
icon = pygame.image.load('fox-sitting.png')
pygame.display.set_icon(icon)

# Player
player = pygame.image.load('cat.png')
playerX = 300
playerY = 500

def player():
    screen.blit(player, (playerX, playerY))


#Main loop
running = True
while running:
    pygame.display.update()

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

    screen.fill((244, 232, 255))
    player()

【问题讨论】:

您使用了两次名称player。它是由pygame.image.load('cat.png') 返回的表面和闪烁到屏幕的函数。 ...重命名player函数:drawPlayer 对不起,我忘了说播放器变量名的变化,教程人用了一个大名字,所以我把它缩短了。顺便谢谢@Rabbid76 和@ChrisOram。 【参考方案1】:

您已经使用了两次名称播放器。是pygame.image.load('cat.png')返回的表面,也是blits给屏幕的函数。将player函数重命名为drawPlayer

【讨论】:

好吧,我几周前就澄清了,但你的答案仍然是正确的。

以上是关于Pygame 没有 blitting 图像,而是吐出类型错误的主要内容,如果未能解决你的问题,请参考以下文章

python pygame blit 函数

python pygame blit。获取要显示的图像

pygame.surface.blit()方法4个参数的使用方法

Pygame Blitting错误

Pygame blit area参数?

Pygame Blit 一次?