我不认为它从其他文件中获取所有信息



我正在做一个pygame项目,但当我运行它时,它不起作用。在我的代码中有很多消息说导入的文件可能是";未定义或定义的";这是令人困惑的。我不知道这是不是原因。(我正在使用repl.it,一周前刚开始尝试学习pygame(

main.py代码:

from settings import *
from tiles import tiles
#pygame setup
pygame.init()
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()
test_tile = pygame.sprite.Group(Tile(100, 100), 200)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill('black')
test.tile.draw(screen)
pygame.display.update()
clock.tick(60)

settings.py代码:

'                              ',
'                              ',
'                              ',
' XX    XXX              XX    ',
' XX                           ',
' XXXX          XX          XX ',
' XXXX        XX               ',
' XX    X   XXXX    XX    XX   ',
'       X   XXXX    XX    XXX  ',
'    XXXX   XXXXXX  XX    XXXX ',
'XXXXXXXX   XXXXXX  XX    XXXX ',]
tile_size = 64
screen_width = 1200
screen_height = len(level_map) * tile_size

tiles.py代码:


class Tile(pygame.sprite.Sprite):
def __init__(self,pos,size):
super().__init__()
self.image = pygame.Surface((size,size))
self.image.fill('grey')
self.rect = self.image.get_rect(topleft = pos)

您的代码就快到了。目前,我建议将所有内容都放在一个文件中。显然,从长远来看,这会变得一团糟,但现在会更容易。

有几个bug围绕着精灵组的创建和添加精灵。

代码需要首先创建一个Sprite Group,然后将Sprite添加到其中。可以在添加到组时创建瓦片,所有这些都在一行代码中,但这稍后将不可行。

map_tiles = pygame.sprite.Group()            # Sprite Group
test_tile = Tile( (100, 100), TILE_SIZE )    # Sprite
map_tiles.add( test_tile )                   # Put Sprite into Sprite Group

有了这一改变,再加上一些调整,它就起作用了:

import pygame
### Settings
level_map = [ 
'                              ',
'                              ',
'                              ',
' XX    XXX              XX    ',
' XX                           ',
' XXXX          XX          XX ',
' XXXX        XX               ',
' XX    X   XXXX    XX    XX   ',
'       X   XXXX    XX    XXX  ',
'    XXXX   XXXXXX  XX    XXXX ',
'XXXXXXXX   XXXXXX  XX    XXXX ',]
GREY  = ( 128, 128, 128 )
BLACK = (   0,   0,   0 )
TILE_SIZE = 64
SCREEN_WIDTH  = len( level_map[0] ) * TILE_SIZE
SCREEN_HEIGHT = len( level_map ) * TILE_SIZE

### Tile Sprite class
class Tile(pygame.sprite.Sprite):
def __init__(self,pos,size):
super().__init__()
self.image = pygame.Surface((size,size), pygame.SRCALPHA)
self.image.fill( GREY )
self.rect = self.image.get_rect(topleft = pos)

#pygame setup
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
clock = pygame.time.Clock()
map_tiles = pygame.sprite.Group()           # Group of all map tiles
test_tile = Tile( (100, 100), TILE_SIZE )   # A single map Tile
map_tiles.add( test_tile )                  # Put tile-sprite into group

#main loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# paint the screen
screen.fill( BLACK )
map_tiles.draw(screen)
pygame.display.update()
# clamp refresh-rate to 60 FPS
clock.tick(60)
# exiting    
pygame.quit()
#sys.exit()

通常所有的常数,例如"0";瓦片大小";都是用大写字母写的。这使得阅读代码的人在阅读代码时可以立即知道它代表什么

最新更新