выдает ошибку в строке screen.blit(bg(0,0))

Рейтинг: -2Ответов: 2Опубликовано: 16.03.2023

код:

import pygame
import random

from pygame import mixer

mixer.init()
mixer.music.load("space.ogg")
mixer.music.play()

WIDTH = 480
HEIGHT = 600
FPS = 60

# Задаем цвета


bg = pygame.image.load('galaxy.jpg')

black = (0, 0, 0)

# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Шутер")
clock = pygame.time.Clock()

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('rocket.png')
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.x = 0

    def update(self):
        self.speedx = 0
        ks = pygame.key.get_pressed()
        if ks[pygame.K_LEFT]:
            self.x = -8
        if ks[pygame.K_RIGHT]:
            self.x = 8
            self.rect.x += self.x
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

all_sprites = pygame.sprite.Group()
player = Player()

all_sprites.add(player)


running = True

while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    all_sprites.update()
    
    screen.blit(bg(0,0))

    all_sprites.draw(screen)
    bg.draw(screen)

    pygame.display.flip()

pygame.quit() 

Ответы

▲ 1

Ошибка возникает из-за того, что пытаетесь вызвать функцию bg как функцию, но на самом деле bg является загруженным изображением. Решить можно заменив строку screen.blit(bg(0,0)) на screen.blit(bg, (0,0)), чтобы нарисовать загруженное изображение на экране

import random
import pygame
from pygame import mixer

mixer.init()
mixer.music.load("space.ogg")
mixer.music.play()

WIDTH = 480
HEIGHT = 600
FPS = 60

# Задаем цвета
bg = pygame.image.load('galaxy.jpg')
black = (0, 0, 0)

# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Шутер")
clock = pygame.time.Clock()

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('rocket.png')
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.x = 0

    def update(self):
        self.speedx = 0
        ks = pygame.key.get_pressed()
        if ks[pygame.K_LEFT]:
            self.x = -8
        if ks[pygame.K_RIGHT]:
            self.x = 8
            self.rect.x += self.x
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

running = True

while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    all_sprites.update()
    
    screen.blit(bg, (0,0))

    all_sprites.draw(screen)
    pygame.display.flip()

pygame.quit() 
▲ 1

При передаче аргументов в функцию screen.blit(bg(0,0)) пропущена запятая. :)