NeuroTask脚本开发记忆游戏:如何阻止点击目标方块外导致实验终止?
NeuroTask脚本开发记忆游戏:如何阻止点击目标方块外导致实验终止?
我仔细看了你的代码,问题核心在于当前的点击事件捕获逻辑会处理所有点击,包括方块以外的区域——当你点击非方块区域时,e.event.target.id要么是空值,要么不是有效的方块ID,后续的parseInt和blocks[b]操作就会出错,直接导致实验终止。
要解决这个问题,我们需要修改TheGame函数里的点击等待逻辑:只响应我们创建的方块的点击,忽略其他区域的无效点击,具体可以这么做:
解决方案步骤
- 把原来单次等待点击的代码,改成一个循环,直到用户点击了有效的方块
- 在循环里判断点击目标是否属于我们创建的
blocks集合,或者检查目标的id是否是0-15之间的有效数字(因为你的方块ID是从0到15)
修改后的TheGame关键代码片段
for (i = 0; i < 16; i++) // Have subject click series { s_block.showimage(stimulus[i]); let b; // 循环等待,直到点击有效方块 while (true) { e = await("click"); // 捕获点击事件 // 检查目标是否有有效ID,且是我们的方块ID范围(0-15) const targetId = e.event.target.id; if (targetId === undefined || isNaN(parseInt(targetId))) { continue; // 无效点击,跳过,继续等待下一次点击 } b = parseInt(targetId); // 确认ID在方块数组的有效索引内 if (b >= 0 && b < blocks.length) { break; // 有效点击,退出循环,继续后续逻辑 } } log(b, "ID"); blocks[b].blink("green",250); // 250 ms blink to black if (series[i] !== b) // Count errors { blocks[b].blink("red",250); learning.push(b); } }
代码解释
- 用
while(true)循环包裹点击等待逻辑,直到捕获到有效点击才退出循环 - 先检查点击目标的
id是否存在且能转成有效数字,无效的话直接continue,继续等待下一次点击 - 再验证ID是否在我们的方块索引范围内(0到15,因为
blocks数组有16个元素),确保是我们创建的方块被点击 - 只有通过所有检查的点击,才会执行后续的日志记录、方块闪烁和错误判断逻辑
这样修改后,用户误点击方块外的区域时,实验会完全忽略这个操作,继续等待正确的方块点击,不会终止。另外你提到尝试过异步编程,其实NeuroTask的await()本身就是异步等待的逻辑,我们这里只是用循环来过滤无效的异步事件,不需要额外复杂的异步处理~
备注:内容来源于stack exchange,提问作者Sheila
相关产品推荐
相关产品推荐

