【问题标题】:getting an error 'TypeError: argument 1 must be pygame.Surface, not builtin_function_or_method'收到错误“TypeError:参数 1 必须是 pygame.Surface,而不是 builtin_function_or_method”
【发布时间】:2021-06-22 14:10:14
【问题描述】:
import random 
import sys
import pygame
from pygame.locals import *

#global var for the games
FPS = 32
SCREENWIDTH = 289
SCREENHEIGHT = 511
SCREEN = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT))
GROUNDY = SCREENHEIGHT * 0.8
GAME_SPRITE = {}
GAME_SOUND = {}
PLAYER = 'imgs/bird.png'
BACKGROUND = 'imgs/background.png'
PIPE = 'imgs/pipe.png'


def welcomeScreen():
   
    playerx = int(SCREENWIDTH/5)
    playery = int((SCREENHEIGHT - GAME_SPRITE['player'].get_height())/2)
    messagex = int((SCREENWIDTH - GAME_SPRITE['message'].get_width())/2)
    messagey = int(SCREENHEIGHT*0.13)
    basex = 0
    while True:
        for event in pygame.event.get():
            # if user clicks on cross button, close the game
            if event.type == QUIT or (event.type==KEYDOWN and event.key == K_ESCAPE):
                pygame.quit()
                sys.exit()

            # If the user presses space or up key, start the game for them
            elif event.type==KEYDOWN and (event.key==K_SPACE or event.key == K_UP):
                return
            else:
                SCREEN.blit(GAME_SPRITE['background'], (0, 0))    
                SCREEN.blit(GAME_SPRITE['player'], (playerx, playery))    
                SCREEN.blit(GAME_SPRITE['message'], (messagex,messagey ))    
                SCREEN.blit(GAME_SPRITE['base'], (basex, GROUNDY))    
                pygame.display.update()
                FPSCLOCK.tick(FPS)

    


if __name__ == '__main__':
    pygame.init()
    FPSCLOCK = pygame.time.Clock()
    pygame.display.set_caption('Flappy Bird')
    GAME_SPRITE['numbers'] = (
        pygame.image.load('imgs/1.png').convert_alpha(),
        pygame.image.load('imgs/2.png').convert_alpha(),
        pygame.image.load('imgs/3.png').convert_alpha(),
        pygame.image.load('imgs/4.png').convert_alpha(),
        pygame.image.load('imgs/5.png').convert_alpha(),
        pygame.image.load('imgs/6.png').convert_alpha(),
        pygame.image.load('imgs/7.png').convert_alpha(),
        pygame.image.load('imgs/8.png').convert_alpha(),
        pygame.image.load('imgs/9.png').convert_alpha(),
        pygame.image.load('imgs/0.png').convert_alpha()
    )

    GAME_SPRITE['pipe'] =( 
    pygame.transform.rotate(pygame.image.load(PIPE).convert_alpha(),180),
    pygame.image.load(PIPE).convert_alpha()

    )
    GAME_SPRITE['message'] = pygame.image.load('imgs/message.png').convert_alpha()
    GAME_SPRITE['base'] = pygame.image.load('imgs/base.png').convert_alpha()



    GAME_SOUND['crash'] = pygame.mixer.Sound('sound/crash.mp3')
    GAME_SOUND['hit'] = pygame.mixer.Sound('sound/hit.mp3')
    GAME_SOUND['swoosh'] = pygame.mixer.Sound('sound/swoosh.mp3')


    GAME_SPRITE['background'] = pygame.image.load(BACKGROUND).convert
    GAME_SPRITE['player'] = pygame.image.load(PLAYER).convert_alpha()


    while True:
        welcomeScreen()
        

第 40 行,在欢迎屏幕中 SCREEN.blit(GAME_SPRITE['background'], (0, 0)) TypeError:参数 1 必须是 pygame.Surface,而不是 builtin_function_or_method 我尝试做很多事情也在网上搜索过,但没有得到答案。有人可以帮我吗?

【问题讨论】:

  • 与所有类似图像相比,您对GAME_SPRITE['background'] 的分配似乎缩短了。
  • 这是一个错字。 pygame.image.load(BACKGROUND).convert 必须是 pygame.image.load(BACKGROUND).convert()

标签: python pygame


【解决方案1】:

问题出在这一行:

GAME_SPRITE['background'] = pygame.image.load(BACKGROUND).convert

通过此分配,您的backgroundfunction。你需要这样称呼它:

GAME_SPRITE['background'] = pygame.image.load(BACKGROUND).convert()

【讨论】:

    【解决方案2】:

    GAME_SPRITE['background'] = pygame.image.load(BACKGROUND).convertconvert 部分是函数还是方法?如果是这样,您在它之后缺少()

    将该行更改为

    GAME_SPRITE['background'] = pygame.image.load(BACKGROUND).convert()
    

    看看它是否符合你的预期。

    如果这样可以解决您的问题,那么问题在于您已将convert 函数 分配给GAME_SPRITE['background'],而不是调用convert() 并分配返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多