Python Pygame TypeError:参数1必须是pygame.Surface,而不是str

问题描述

我不知道如何修复它们的错误。请帮我:( 我想让鱼动起来。

import pygame
import random
import os
pygame.init()

class Game:
    def __init__(self):
        super().__init__()
        self.WIDTH,self.HEIGHT = 1100,700
        self.player = Player()
        self.player_id = self.player.id
        self.main()

    def main(self):
        FPS = 60
        clock = pygame.time.Clock()
        run = True
        while run:

            clock.tick(FPS)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
            self.draw()

            pygame.display.update()
        pygame.quit()

    def draw(self):
        #background
        self.canvas = pygame.display.set_mode((self.WIDTH,self.HEIGHT))
        space_background = pygame.transform.scale(pygame.image.load(os.path.join("Sprites","background.png")),(self.WIDTH,self.HEIGHT))
        pygame.display.set_caption("Akvarium")
        self.canvas.blit(space_background,(0,0))

        #player
        self.canvas.blit(self.player.player_fish,(self.player_id.x,self.player_id.y))

        pygame.display.update()
class Sprites:

    def __init__(self,x,y,id_width,id_height):
        self.x,self.y = x,y
        self.id = pygame.Rect(x,id_height)

    def load_sprites(self,file_path):
        sprites = [i for i in os.listdir(file_path)]
        return sprites

class Player(Sprites):
    IDLE = "idle"
    SWIM = "swim"
    LEFT = "left"
    RIGHT = "right"
    #player_img = pygame.image.load(os.path.join("Sprites/Player/idle_left","tile000.png"))

    def __init__(self):
        x,y = 100,100
        self.player_width,self.player_height = 85,60
        super().__init__(x,self.player_width,self.player_height)
        self.player_sprites = self.load_all_sprites()
        self.movement = self.IDLE
        self.directions = self.LEFT

        self.tik()


    def load_all_sprites(self):
        sprite_sheed = {self.IDLE: {self.LEFT: [],self.RIGHT: []},self.SWIM: {self.LEFT: [],self.RIGHT: []}}

        sprite_sheed[self.IDLE][self.LEFT] = self.load_sprites("Sprites/Player/idle_left")
        sprite_sheed[self.IDLE][self.RIGHT] = self.load_sprites("Sprites/Player/idle_right")
        sprite_sheed[self.SWIM][self.LEFT] = self.load_sprites("Sprites/Player/swim_left")
        sprite_sheed[self.SWIM][self.RIGHT] = self.load_sprites("Sprites/Player/swim_right")

        return sprite_sheed

    def animation(self,idx):
        idx += 1
        max_idx = len(self.player_sprites[self.movement][self.directions])
        idx = idx % max_idx
        return idx

    def tik(self):
        sprite_idx = self.animation(0)
        self.player_img = self.player_sprites[self.movement][self.directions][int(sprite_idx)]
        self.player_fish = pygame.transform.scale(self.player_img,(self.player_width,self.player_height))

Game()

一个错误是: self.player_fish = pygame.transform.scale(self.player_img,self.player_height)) 类型错误:参数 1 必须是 pygame.Surface,而不是 str

Python 是一种解释型、高级和通用的编程语言。 Python 的设计理念强调代码可读性,并显着使用了大量空白。它的语言结构和面向对象的方法旨在帮助程序员为小型和大型项目编写清晰、合乎逻辑的代码

解决方法

#correct code must be
self.player_fish = pygame.transform.scale(self.canvas,(self.player_width,self.player_height))

这里self.canvas是表面,大小是正确的..... 希望能帮到你