Scratch游戏瓦片网格中拖拽方块的放置有效性判定问题
Scratch类俄罗斯方块拖拽游戏问题解决
问题描述
我正在制作一款可将类俄罗斯方块拖拽至网格的Scratch游戏。当新方块拖拽至棋盘时,需要判定其当前位置是否有效。我使用一个全零列表标记哪些瓦片已被占用、哪些未被占用,计划通过鼠标坐标结合已知偏移量,将X/Y坐标映射至该列表。但尝试用代码持续追踪鼠标位置时,“say mouse X”仅在点击时更新一次,无法实现持续追踪。
实时鼠标追踪修复
你的代码只在点击触发时执行一次,所以没法实时更新鼠标坐标。要实现持续追踪,需要调整代码结构:
- 把触发逻辑换成
当绿旗被点击,在外层套上重复执行积木 - 将
说 mouse X这类获取鼠标坐标的代码放到重复执行块内,这样每帧都会刷新鼠标位置
如果只需要在拖拽方块时追踪,可以增加一个是否在拖拽变量:
- 点击方块时将变量设为
是,松开鼠标时设为否 - 在重复执行块内加判断:仅当
是否在拖拽 = 是时,才更新并处理鼠标坐标
鼠标坐标映射至占用列表
假设你的棋盘瓦片尺寸为tile_size(比如20),棋盘左上角的绝对坐标为board_x、board_y,棋盘总列数为col_count,按以下步骤映射:
- 计算鼠标相对于棋盘的偏移坐标:
相对X = mouse X - board_x 相对Y = mouse Y - board_y - 转换为棋盘的行列索引(从0开始计数):
行号 = 向下取整(相对Y / tile_size) 列号 = 向下取整(相对X / tile_size) - 转换为Scratch列表的索引(列表索引从1开始):
列表索引 = 行号 * col_count + 列号 + 1 - 位置有效性判定:
- 先检查行号、列号是否在棋盘范围内(行号≥0且<总行数,列号≥0且<col_count),超出则位置无效
- 再检查列表对应索引的值是否为0,0代表未占用,位置有效
内容的提问来源于stack exchange,提问作者Letharion
相关产品推荐
相关产品推荐

