Godot 4.0中碰撞后无法移除大于1单位尺寸的Tile问题求助
解决Godot 4.0中大尺寸Tile碰撞后无法移除的问题
从你提供的日志能明显看出核心问题:碰撞后计算出的单元格坐标(33, 4)不在实际使用的单元格列表里,说明坐标转换逻辑对大尺寸Tile不适用,导致你操作了空单元格,自然看不到Tile被移除。
快速修复方案:直接获取碰撞Tile的单元格坐标
Godot的TileMap在碰撞发生时,会把被碰撞Tile的单元格坐标存在碰撞信息的元数据里,直接读取即可,无需手动转换坐标:
if collision.get_collider().get_class() == "TileMap": print_debug("ball hit tilemap") var cell = collision.get_meta("tile_position") tilemap.set_cell(0, cell, -1)
原代码问题分析
你之前用collision.get_position() - collision.get_normal()计算位置,对1x1 Tile有效是因为Tile尺寸和单元格大小完全匹配,碰撞点转换后刚好对应正确的单元格。但3x3尺寸的Tile,碰撞点可能落在Tile的边缘区域,手动调整后的坐标会偏移到相邻的空单元格,就像日志里的(33,4),而实际目标Tile在(34,3)。
如果不想用元数据的方式,也可以改用world_to_map直接转换碰撞点的全局坐标:
if collision.get_collider().get_class() == "TileMap": print_debug("ball hit tilemap") var cell = tilemap.world_to_map(collision.get_position()) tilemap.set_cell(0, cell, -1)
关于编辑器警告
你提到的editor/plugins/tiles/tile_set_editor.cpp:227警告是编辑器层面的问题,和运行时的Tile移除功能无关,不用理会。
内容的提问来源于stack exchange,提问作者jjcard
相关产品推荐
相关产品推荐

