【发布时间】:2020-05-23 09:41:27
【问题描述】:
所以我设法在我的 PyGame 项目中创建、导入和显示 16x16 TileMap。 我有一个名为 ground 的资产层和一个最初称为 objects 的对象层。
Tile software screenshot with my layers
然后我有这个简单的代码来创建我的 TileMap:
class TiledMap:
def __init__(self, filename):
tm = pytmx.load_pygame(filename, pixelalpha=True)
self.width = tm.width * TILE_SIZE
self.height = tm.height * TILE_SIZE
self.tmxdata = tm
def render(self, surface):
ti = self.tmxdata.get_tile_image_by_gid
for layer in self.tmxdata.visible_layers:
if isinstance(layer, pytmx.TiledTileLayer):
for x, y, gid, in layer:
tile = ti(gid)
if tile:
tile = pg.transform.scale(tile,(TILE_SIZE,TILE_SIZE))
surface.blit(tile, (x * TILE_SIZE,
y * TILE_SIZE))
def make_map(self):
temp_surface = pg.Surface((self.width, self.height), pg.SRCALPHA).convert_alpha()
self.render(temp_surface)
return temp_surface
编辑:我忘了说我的 16x16 地图实际上已重新缩放为 64x64 (TILE_SIZE) 图像,但仅适用于可见层 ground,我想使用 对象层也是。
这非常适合缩放我的“可见层”,即 ground。 但是当我绘制碰撞时,您可以看到 objects 仍然非常小,不适合我的新地图分辨率:
Game screenshot with in Blue:Player hit box and in Yellow:Colliders
如您所见,我在 TileMap 中设置的 墙 的点击框未正确缩放。
所以问题是,如何使用 pyTMX 缩放 TileMap 的 Objects 层?
谢谢大家。
【问题讨论】:
标签: python-3.x pygame pytmx