我需要创建具有网格列表中的数字1特征的精灵列表。但我需要拆分窗口len(grid),len(grid [0])如何在WallTile类中进行操作。但是我需要在网格中的数字1的位置填充窗口。这将是瓷砖的迷宫。我想使用精灵,因为我需要使用瓷砖墙进行碰撞检测。如何从网格模板列表中制作精灵列表
width, height = 700, 700 #window size
grid = [[0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 1, 1],
[0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 0, 0],
[0, 1, 0, 1, 1, 1, 1]]
class WallTile(pygame.sprite.Sprite):
def __init__(self):
super(WallTile, self).__init__()
self.TILE_W = width/len(grid) # spliting window by len(grid) and set size of one tile
self.TILE_H = height/len(grid[0])
self.tiles_x = width/self.TILE_W # size of all tiles
self.tiles_y = height/self.TILE_H
self.imageMaster = pygame.image.load("images/wallBig.png")
self.image = self.imageMaster
self.pozX = 0.0
self.pozY = 0.0
self.image = pygame.transform.scale(self.imageMaster, (self.TILE_W, self.TILE_H))
self.rect = self.image.get_rect()
self.rect.center = (self.pozX, self.pozY)
# here I need fill some sprite list with tiles with different coordinates.
# I want to put tile on place where is number 1 in grid. But put it to screen.
for y in range(self.tiles_y):
for x in range(self.tiles_x):
for i in range(len(grid[0])):
for j in range(len(grid)):
if grid[i][j] is 1:
# I need make new tile and put it to sprite list
self.pozX, self.pozY = (x * self.TILE_W), (y * self.TILE_H)
#
#--- here I dont know what to do...
#
class MainClass:
def Main(self):
# here is how Im drawing sprites on screen.
screen = pygame.display.set_mode(size)
screen.fill((grey))
wallTile = WallTile()
spriteGroup_1 = pygame.sprite.Group(wallTile)
background = pygame.Surface(obrazovka.get_size())
background.fill((grey))
background.set_colorkey((60,0,0))
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT or \
event.type == KEYDOWN and (event.key in [K_ESCAPE, K_q]):
running = False
spriteGroup_1.clear(screen, background)
spriteGroup_1.update()
updateScreen = spriteGroup_1.draw(screen)
pygame.display.update(updateScreen)
pygame.display.flip()
if __name__ == '__main__':
mainWin = MainClass()
sys.exit((mainWin.Main()))
真的非常感谢您的建议。
我无法确切地理解问题是什么。你为什么要在WallTile类中维护一个精灵列表,这是一个精灵本身? – Haz 2013-04-23 19:27:57
我不知道如何创建更多的瓷砖像1.因为在网格列表中有更多的数字1.所以我知道如何创建1个精灵瓷砖。我不知道如何创建多少瓦片,网格列表中有多少数字是1。是否有一些可迭代的精灵与一些索引,我可以放更多的瓷砖,并选择哪些获得唯一的坐标。所以问题是如何在这些类中创建更多的tile或多个tile多少个grid有数字1. – Thomas 2013-04-23 20:22:03
首先,您的WallTile类正在扩展Sprite,所以我不明白为什么要保留一个tile列表在WallTile对象内。在WallTile范围外有一个Sprites列表会更有意义,它有一个初始化循环,用于查看网格,并为值为1的网格的每个元素创建Sprites。 – Haz 2013-04-23 20:36:52