【发布时间】:2018-02-09 23:48:55
【问题描述】:
我正在尝试了解 pygame 中的 tilemaps,并学习如何使用 Tiled Map Editor,但我无法成功在 pygame 中加载地图。 代码如下:
import pygame
import pytmx
pygame.init()
display = pygame.display.set_mode((600,400))
clock = pygame.time.Clock()
gameMap = pytmx.TiledMap("map.tmx")
while(True):
clock.tick(60)
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if(event.type == pygame.QUIT):
quit()
if(keys[pygame.K_ESCAPE]):
quit()
for layer in gameMap.visible_layers:
for x, y, gid, in layer:
tile = gameMap.get_tile_image_by_gid(gid)
if(tile != None):
display.blit(tile, (x * gameMap.tilewidth, y * gameMap.tileheight))
pygame.display.update()
它一直给我这个错误:
Traceback(最近一次调用最后一次): 文件“main.py”,第 27 行,在 display.blit(tile, (x * gameMap.tilewidth, y * gameMap.tileheight)) TypeError: 参数 1 必须是 pygame.Surface,而不是元组
我知道当我在控制台中打印磁贴时,这就是我得到的
(一个元组):
('img/NES - Super Mario Bros - Tileset.png', (0, 144, 16, 16), TileFlags(flipped_horizontally=False, flipped_vertically=False, flipped_diagonally=False))。
在pygame中成功加载tilemap的最简单方法是什么?我做错了什么?
【问题讨论】:
-
我可以确认您的错误。
display是Surface对象,tile不是。该错误告诉您将错误类型的对象作为 arg 传递给display.blit。tile是<class 'tuple'>: ('Tiled Images/background.png', (0, 0, 160, 96), TileFlags(flipped_horizontally=False, flipped_vertically=False, flipped_diagonally=False))如果您将tile替换为display,您将获得一些要筛选的活动。 -
谢谢。那么如何让它发挥作用呢?
-
我以前从未使用过这个。我现在正在看。如果您在
display.blit之后输入time.sleep(6),您将看到pygame 窗口渲染到您的屏幕上...... -
出现窗口,但我想在窗口中渲染地图的瓦片。
-
我知道。给我一点时间......我正在学习这个......
标签: python python-3.x pygame tile pytmx