方块放置逻辑流程图 Block Placement Logic Flowchart 开始拖拽方块 setupBlockDragEvents 设置触摸事件监听 onTouchStart 记录初始位置,禁用碰撞 onTouchMove 更新方块位置,显示调试信息 onTouchEnd 调用handleBlockDrop handleBlockDrop 核心放置逻辑处理 是否在kuang 区域内? BlockTag hasTag? 有标签 放回kuang区域 移除标签,恢复原位置 无标签 拒绝放置 恢复到原位置 tryPlaceBlockToGrid BlockManager处理 网格是否 初始化? 放置失败 网格未初始化 查找B1节点 获取方块基准位置 坐标转换 世界坐标→网格本地坐标 是否在网格 边界内? 超出边界 放置失败 findNearestGridNode 找到最近的网格节点 tryPlaceBlockTo SpecificGrid 精确网格放置 canPlaceBlockAt 检查? 网格被占用 或形状不匹配 handleSuccessful Placement 成功放置后处理 markOccupiedPositions 更新网格占用状态 tryMergeOnOverlap 检查是否可以合并 addLockedVisualHint 添加视觉锁定效果 BlockTag.removeTag 移除方块标签 恢复原位置 放置失败,恢复到拖拽前位置 放置完成 图例 开始/结束 处理过程 判断条件 成功操作 错误/失败 是/成功 否/失败