这是错误:
File "e:\Pygame\main.py", line 23, in new
self.createTilemap()
AttributeError: 'Game' object has no attribute 'createTilemap'
我使用此程序在名为 config 的单独代码上创建了一个 Tilemap:
import pygame
from sprites import *
from config import *
import sys
class Game:
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
self.clock = pygame.time.Clock()
self.running = True
def createTilemap(self):
for i, row in enumerate(tilemap):
for j, column in enumerate(row):
if column == "B":
Block(self, j, i)
if column == "P":
Player(self, j, i)
def new(self):
self.createTilemap()
# a new game starts
self.playing = True
self.all_sprites = pygame.sprite.LayeredUpdates()
self.blocks = pygame.sprite.LayeredUpdates()
self.enemies = pygame.sprite.LayeredUpdates()
self.attacks = pygame.sprite.LayeredUpdates()
self.createTilemap()`
其他一切正常,但 self.createTilemap() 行无法运行。
你遇到的错误是因为你在
__init__
方法中定义了
createTilemap
方法,而不是作为
Game
类的直接方法。在 Python 中,类方法的缩进至关重要。
将你的代码修改如下,将
createTilemap
的缩进级别与其他
Game
类方法(如
new
)相同:
import pygame
from sprites import *
from config import *
import sys
class Game:
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
self.clock = pygame.time.Clock()
self.running = True
def createTilemap(self): # 将缩进与其他方法对齐
for i, row in enumerate(tilemap):
for j, column in enumerate(row):
if column == "B":
Block(self, j, i)
if column == "P":
Player(self, j, i)
def new(self):
self.createTilemap()
# a new game starts
self.playing = True
self.all_sprites = pygame.sprite.LayeredUpdates()
self.blocks = pygame.sprite.LayeredUpdates()
self.enemies = pygame.sprite.LayeredUpdates()
self.attacks = pygame.sprite.LayeredUpdates()
self.createTilemap()
通过将
createTilemap
的缩进与其他方法对齐,你就能将其作为
Game
类的一个方法正确定义,从而解决
AttributeError
。