わかりました、以前にこれを尋ねようとしましたが、実際にはまだどこにも行きません。私がやりたいことを十分に説明できることを願っています。これまでのすべてのコードを以下に示します。
- pygame と python をよりよく知るための練習として、2D ゲームを作成しようとしています。
- ゲームは基本的にファミコンゼルダのゲームのようなものになります(最初のもの)
- 現在、トップダウン画面の 1 つを再作成したいと考えています。グリッド上の 16x16 ピクセルの単純なスプライト。
皆さんの多大な助けにより、2 つの 'for' ステートメント (上記) を使用したコンパクトな定義でグリッドを作成する方法についての手がかりが得られました。
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()