如何解决AttributeError: module pygame.Surface没有属性rect



我正在制作《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()

请帮帮我。我已经尝试了很多事情,比如添加一个get_rect,这些东西不起作用。

了解Classes。你必须创建一个类的实例对象。

参见Python代码风格指南

类名通常应使用CapWords约定。

将类名改为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()

最新更新