Как мне решить ошибку атрибута: модуль pygame.surface не имеет прямого атрибута

#python #pygame

Вопрос:

Я делаю шутер сверху вниз pygame , и я столкнулся с этой ошибкой:

 self.screen_rect = screen.get_rect()
 

Это мой код:

 from pygame import *
import pygame
from pygame import surface
from pygame.draw import rect
pygame.init()

(window_width, window_height) = (1000, 500)
window_fill_color = (255, 255, 255)
global screen
screen = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('main ludum dare 49 window')
screen.fill(window_fill_color)
pygame.display.flip()
running = True


class player(object):
    def __init__(self):
        self.rect = pygame.rect.Rect((500, 250, 25, 25))
    
    def show_player(self, surface):
        pygame.draw.rect(screen, (0, 255, 251), self.rect)
    
    def move(self):
            key = pygame.key.get_pressed()
            if key[pygame.K_LEFT]:
                self.rect.move_ip(-1, 0)
            if key[pygame.K_RIGHT]:
                self.rect.move_ip(1, 0)
            if key[pygame.K_UP]:
                self.rect.move_ip(0, -1)
            if key[pygame.K_DOWN]:
                self.rect_1.move_ip(0, 1)


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    pygame.display.update()
    pygame.key.get_pressed()
    player.show_player(surface, screen)
    player.move()
 

Пожалуйста, помогите мне. Я пробовал кучу вещей , таких как добавление a get_rect , и это не работает.

Ответ №1:

Читайте об Classes этом . Вы должны создать объект экземпляра класса.

См. Руководство по стилю для кода Python

Имена классов обычно должны использовать соглашение о заглавных словах.

Измените имя класса на Player :

 class Player(object):
    def __init__(self):
        self.rect = pygame.rect.Rect((500, 250, 25, 25))
    
    def show_player(self, surface):
        pygame.draw.rect(screen, (0, 255, 251), self.rect)
    
    def move(self):
            key = pygame.key.get_pressed()
            if key[pygame.K_LEFT]:
                self.rect.move_ip(-1, 0)
            if key[pygame.K_RIGHT]:
                self.rect.move_ip(1, 0)
            if key[pygame.K_UP]:
                self.rect.move_ip(0, -1)
            if key[pygame.K_DOWN]:
                self.rect_1.move_ip(0, 1)
 

Создайте экземпляр объектов Player класса:

 player = Player()
 

Полный пример:

 import pygame
pygame.init()

window_width, window_height = (1000, 500)
window_fill_color = (255, 255, 255)
screen = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('main ludum dare 49 window')

class Player(object):
    def __init__(self):
        self.rect = pygame.rect.Rect((500, 250, 25, 25))
    
    def show_player(self, surface):
        pygame.draw.rect(screen, (0, 255, 251), self.rect)
    
    def move(self):
            key = pygame.key.get_pressed()
            if key[pygame.K_LEFT]:
                self.rect.move_ip(-1, 0)
            if key[pygame.K_RIGHT]:
                self.rect.move_ip(1, 0)
            if key[pygame.K_UP]:
                self.rect.move_ip(0, -1)
            if key[pygame.K_DOWN]:
                self.rect.move_ip(0, 1)

player = Player()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    pygame.key.get_pressed()
    player.move()

    screen.fill(window_fill_color)
    player.show_player(screen)
    pygame.display.update()