Reputation: 19
I dont know how to fix them bug. Please help me:( I want the fish to be animated.
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, y, id_width, 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, y, 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()
a mistake is: self.player_fish = pygame.transform.scale(self.player_img, (self.player_width, self.player_height)) TypeError: argument 1 must be pygame.Surface, not str
Python is an interpreted, high-level and general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.
Upvotes: 1
Views: 157
Reputation: 97
#correct code must be
self.player_fish = pygame.transform.scale(self.canvas,(self.player_width,self.player_height))
Here self.canvas is the surface and the size is corrrect..... Hope it helps
Upvotes: 1