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
相关产品推荐
相关产品推荐

