问题描述
我不知道如何修复它们的错误。请帮我:( 我想让鱼动起来。
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是表面,大小是正确的..... 希望能帮到你