-1

好吧,我以前试过问这个,但我还没有真正到达任何地方。我希望我能解释我想做的足够好。我将通过我到目前为止的所有代码。

  • 我试图创建一个 2D 游戏,就像练习更好地了解 pygame 和 python。
  • 游戏将基本上像NES Zelda游戏(第一个)
  • 现在我想重新创建一个自上而下的屏幕。网格上 16x16 像素的简单精灵。
  • 现在在你们的大力帮助下,我已经了解了如何使用两个“for”语句(上图)在一个漂亮的紧凑 def 中创建网格。

    def drawMapArray(maparray):
    for x in range(0, xTile):
        for y in range(0, yTile):
            current_tile = tile_dict[maparray[x, y]]
            screen.blit(current_tile, (x*spritesize, y*spritesize))
    
  • 现在我想做的是从另一个文件中获取地图,从 png 文件中绘制出网格上的图块。所以如果我的屏幕是 8 x 4 块:

     1 0 2 2 2 3 2 3
     3 0 0 0 0 1 0 0 
     4 4 4 4 4 1 1 1
     1 1 1 3 3 3 4 4
    
     1 = thing1.png
     2 = thing2.png
     3 = thing3.png
     4 = thing4.png
    
  • 因此,我可以以某种方式将其导入到 maparray 中,以便每个图块都有正确的 .png 文件显示在网格上。我将如何让这种情况发生?下面是我的代码。

    import numpy
    import pygame
    import sys
    from pygame.locals import *
    
    pygame.init()
    
    fpsClock = pygame.time.Clock()
    
    #print help(numpy)
    
    resmulti=3
    spritesize=16*resmulti
    resolution=(256*resmulti,224*resmulti)
    screen = pygame.display.set_mode((resolution[0], resolution[1]))
    pygame.display.set_caption("testing.")
    
    xTile = 2
    yTile = 2
    
    gameRunning = True
    groundArray = numpy.ones((xTile,yTile))
    ###################################
    ######### Image Manipulation ######
    ###################################
    def pngLoad(imgloc, size, flipx, flipy):
        img = pygame.image.load(imgloc).convert_alpha()
        if size > 1:
            #pygame.transform.scale(Surface, (width, height), DestSurface = None): return Surface
            img = pygame.transform.scale(img, (img.get_width()*size, img.get_height()*size))
        if flipx == 1:
            #pygame.transform.flip(Surface, xbool, ybool)
            img = pygame.transform.flip(img, True, False)
        if flipy == 1:
            img = pygame.transform.flip(img, False, True)
    
        return img
    
    ###################################
    ######### All Image Tiles #########
    ###################################
    tile_dict = {3 : pngLoad("link1.png", resmulti,0,0),
                 2 : pngLoad("shrub_01.png", resmulti,0,0),
                 1 : pngLoad("tanback.png", resmulti,0,0)
                }
    
    def drawMapArray(maparray):
        for x in range(0, xTile):
            for y in range(0, yTile):
                #Determines tile type.
                current_tile = tile_dict[maparray[x, y]]
                screen.blit(current_tile, (x*spritesize, y*spritesize))
    
    
    while gameRunning:
        drawMapArray(groundArray)
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameRunning = False
                break
    
        #Updates display and then sets FPS to 30 FPS.
        pygame.display.update()
        fpsClock.tick(30)
    
    pygame.quit()
    
4

1 回答 1

0

这个例子使用 spritesheet 作为瓷砖,numpy 用于二维瓷砖数组。https://stackoverflow.com/a/12665286/341744

于 2012-12-01T01:07:18.780 回答