微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Pygames 中制作简单的 2d 地图

如何解决无法在 Pygames 中制作简单的 2d 地图

我正在尝试在 Pygame 中制作一个简单的 2d 游戏地图,但遇到了图块布局的问题。我试图用二维数组制作地图,但它不起作用。它们都出现在一行上。我的目标是通过一个只有矩形的数组制作一个简单的二维地图。这是代码

import pygame
pygame.init()

root = pygame.display.set_mode((500,500))
pygame.display.set_caption("Game")

surface = pygame.Surface((60,60),pygame.SRCALPHA)
rect = pygame.draw.rect(surface,(255,0),(50,50,50)),50)

surface_one = pygame.Surface((60,pygame.SRCALPHA)
rect_one = pygame.draw.rect(surface_one,(0,255,50)

def main():
    tileX = 0
    tileY = 0

    map = [[0,0],[1,1,1],0]]

    for x in map:
        for x in x:
            if x == 0:
                root.blit(surface,[tileX,tileY]) 
                tileX = tileX+16
            if x == 1:
                root.blit(surface_one,tileY]) 
                tileX = tileX+16

    tileX = 0
    tileY += 30

    pygame.display.update()

run = True
while run:
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    main()
 

解决方法

您必须在外循环开始时设置 tileX = 0 并在外循环结束时增加 tileY 并且:

def main():

    map = [[0,0],[1,1,1],0]]

    tileY = 0
    for row in map:
        tileX = 0
        for x in row:
            if x == 0:
                root.blit(surface,[tileX,tileY]) 
            if x == 1:
                root.blit(surface_one,tileY]) 
            tileX += 16
        tileY += 16

    pygame.display.update()

但是,您可以使用 enumerate 简化代码:

def main():

    map = [[0,0]]

    for y,row in enumerate(map):
        tileX = 0
        for x,cell in enumerate(row):
            image = surface_one if cell == 1 else surface
            root.blit(image,[x*16,y*16]) 

    pygame.display.update()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。