代码配置TileSet后TileMap调用set_cell不显示tiles问题排查
问题:代码创建TileSetAtlasSource后Tile无法显示,编辑器手动配置正常
我通过代码创建TileSetAtlasSource:
var atlas_source = TileSetAtlasSource.new() atlas_source.texture = atlas_texture # Tileset image with all the tiles in it tileset.add_source(atlas_source, 0) # Adding it to the TileSet with ID 0
随后遍历tiles并创建以供后续使用:
for y in atlas_size.y: for x in atlas_size.x: atlas.create_tile(Vector2i(x, y))
但调用set_cell方法验证时:
for x in 16: for y in 16: TileMap.set_cell(0, Vector2i(x, y), 0, Vector2i(x, y)) # Layer 0, then coordinates on TileMap, then source ID (which is 0), and lastly tile coords
tiles无法显示,不过图集纹理本身显示正常。手动通过编辑器配置时所有tiles均可正常显示,请问问题出在哪里?
解决方案
问题出在三个容易忽略的细节上,对应修正如下:
1. 未设置TileSetAtlasSource的单块Tile尺寸
手动配置时编辑器会要求设置Tile大小,但代码里必须显式指定,否则Atlas无法正确切割图集。在添加source到tileset前,加入:
# 替换为你实际的Tile宽高,比如32x32 atlas_source.tile_size = Vector2i(32, 32)
2. 创建Tile的对象引用错误
代码中atlas.create_tile(...)的atlas变量未定义,应该使用你创建的atlas_source对象:
for y in atlas_size.y: for x in atlas_size.x: atlas_source.create_tile(Vector2i(x, y))
3. 未将配置好的TileSet关联到TileMap
你创建并配置了tileset,但没有把它赋值给目标TileMap组件,导致TileMap不知道使用哪个图集。添加:
# 确保TileMap是正确的节点引用,比如用$TileMap获取场景中的节点 $TileMap.tile_set = tileset
修正后的完整代码示例:
var tileset = TileSet.new() var atlas_source = TileSetAtlasSource.new() atlas_source.texture = atlas_texture # 设置Tile尺寸 atlas_source.tile_size = Vector2i(32, 32) tileset.add_source(atlas_source, 0) # 遍历创建Tile for y in atlas_size.y: for x in atlas_size.x: atlas_source.create_tile(Vector2i(x, y)) # 关联TileSet到TileMap $TileMap.tile_set = tileset # 验证设置Cell for x in 16: for y in 16: $TileMap.set_cell(0, Vector2i(x, y), 0, Vector2i(x, y))
内容的提问来源于stack exchange,提问作者DotFX
相关产品推荐
相关产品推荐

