好吧,我以前试过问这个,但我还没有真正到达任何地方。我希望我能解释我想做的足够好。我将通过我到目前为止的所有代码。
- 我试图创建一个 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()