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

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);
    }
}

代码解释

  1. 用while(true)循环包裹点击等待逻辑,直到捕获到有效点击才退出循环
  2. 先检查点击目标的id是否存在且能转成有效数字,无效的话直接continue,继续等待下一次点击
  3. 再验证ID是否在我们的方块索引范围内(0到15,因为blocks数组有16个元素),确保是我们创建的方块被点击
  4. 只有通过所有检查的点击,才会执行后续的日志记录、方块闪烁和错误判断逻辑

这样修改后,用户误点击方块外的区域时,实验会完全忽略这个操作,继续等待正确的方块点击,不会终止。另外你提到尝试过异步编程,其实NeuroTask的await()本身就是异步等待的逻辑,我们这里只是用循环来过滤无效的异步事件,不需要额外复杂的异步处理~

备注:内容来源于stack exchange,提问作者Sheila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:09:29