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

Code.org Game Lab中实现mousePressedOver单次点击触发的技术求助

解决code.org中mousePressedOver重复触发的问题

问题原因

draw()函数是每帧循环执行的,mousePressedOver()在鼠标按住的期间,每帧都会返回true,导致你的代码会不断创建新的shhhh精灵,重复执行点击逻辑。

修复方案

添加一个全局状态变量,标记是否已经处理过点击事件,仅在未处理状态下执行点击逻辑,执行后将状态更新为已处理。

修改后的完整代码

// framerate 
World.frameRate = 120;

// sound
playSound("baller.mp3");

// variables+sprites
var balloon = createSprite(200, 200);
balloon.setAnimation("balloon");
balloon.scale = 0.1;
var baller = createSprite(200, 200);
baller.setAnimation("baller");
// 新增状态变量:标记是否已点击过baller
var hasClickedBaller = false;

//draw loop 
function draw() {
  // background
  background("white");

  // scale and visible
  balloon.scale = balloon.scale + 0.03;
  baller.visible = false;
  
  // if statement
  if (balloon.scale > 0.5) {
    baller.visible = true;
    balloon.visible = false;
  }
  
  // secret 修复后的点击逻辑
  if (mousePressedOver(baller) && !hasClickedBaller)  {
    var shhhh = createSprite(200, 200);
    shhhh.setAnimation("thing");
    shhhh.scale = 0.3;
    textSize(25);
    text("You werent supposed to see this...", 20,50);
    baller.visible = false;
    // 标记为已点击,阻止后续重复执行
    hasClickedBaller = true;
  }

  // draw sprites
  drawSprites();
}

关键改动说明

  • 新增全局变量hasClickedBaller,初始值为false,用来记录点击状态
  • 在点击判断条件中加入&& !hasClickedBaller,确保仅第一次点击时执行逻辑
  • 执行完点击逻辑后,将hasClickedBaller设为true,后续帧不再触发该分支

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:20