-1

わかりました、以前にこれを尋ねようとしましたが、実際にはまだどこにも行きません。私がやりたいことを十分に説明できることを願っています。これまでのすべてのコードを以下に示します。

  • 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()
    
4

1 に答える 1

0

この例では、タイルにスプライトシートを使用し、タイルの 2 次元配列に numpy を使用しています。https://stackoverflow.com/a/12665286/341744

于 2012-12-01T01:07:18.780 に答える