You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scratch游戏瓦片网格中拖拽方块的放置有效性判定问题

Scratch类俄罗斯方块拖拽游戏问题解决

问题描述

我正在制作一款可将类俄罗斯方块拖拽至网格的Scratch游戏。当新方块拖拽至棋盘时,需要判定其当前位置是否有效。我使用一个全零列表标记哪些瓦片已被占用、哪些未被占用,计划通过鼠标坐标结合已知偏移量,将X/Y坐标映射至该列表。但尝试用代码持续追踪鼠标位置时,“say mouse X”仅在点击时更新一次,无法实现持续追踪。

实时鼠标追踪修复

你的代码只在点击触发时执行一次,所以没法实时更新鼠标坐标。要实现持续追踪,需要调整代码结构:

  • 把触发逻辑换成当绿旗被点击,在外层套上重复执行积木
  • 将说 mouse X这类获取鼠标坐标的代码放到重复执行块内,这样每帧都会刷新鼠标位置

如果只需要在拖拽方块时追踪,可以增加一个是否在拖拽变量:

  • 点击方块时将变量设为是,松开鼠标时设为否
  • 在重复执行块内加判断:仅当是否在拖拽 = 是时,才更新并处理鼠标坐标

鼠标坐标映射至占用列表

假设你的棋盘瓦片尺寸为tile_size(比如20),棋盘左上角的绝对坐标为board_x、board_y,棋盘总列数为col_count,按以下步骤映射:

  1. 计算鼠标相对于棋盘的偏移坐标:
    相对X = mouse X - board_x
    相对Y = mouse Y - board_y
    
  2. 转换为棋盘的行列索引(从0开始计数):
    行号 = 向下取整(相对Y / tile_size)
    列号 = 向下取整(相对X / tile_size)
    
  3. 转换为Scratch列表的索引(列表索引从1开始):
    列表索引 = 行号 * col_count + 列号 + 1
    
  4. 位置有效性判定:
    • 先检查行号、列号是否在棋盘范围内(行号≥0且<总行数,列号≥0且<col_count),超出则位置无效
    • 再检查列表对应索引的值是否为0,0代表未占用,位置有效

内容的提问来源于stack exchange,提问作者Letharion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:52:42