AS3如何实现特定分数仅触发对应Portal生成,避免批量触发?
问题解决方法
你的问题核心在于未限制触发逻辑的执行次数,或是当分数存在跳跃式增长时(虽然你代码里是score += 1,但用else if能彻底避免多条件同时触发的可能),导致不符合预期的重复生成或批量生成。
修复方案一:用else if替代独立if
将多个独立的if改为else if结构,确保同一时间只会执行第一个匹配的条件,不会同时触发多个传送门生成逻辑:
score += 1; score_TF.text = String(score); if (score == 5) { newPortal(); warpsound.play(); portal.visible = true; } else if (score == 10) { newPortal_2(); warpsound.play(); portal2.visible = true; } else if (score == 15) { newPortal_3(); warpsound.play(); portal3.visible = true; }
修复方案二:添加触发标记(彻底杜绝重复生成)
如果你的代码是在循环/每帧执行的逻辑里(比如Unity的Update函数),即便分数只达到目标值一次,也会重复执行生成逻辑。这时需要给每个传送门添加“是否已生成”的标记变量:
// 先定义标记变量,初始值设为false bool portal1Generated = false; bool portal2Generated = false; bool portal3Generated = false; // 分数更新与生成逻辑 score += 1; score_TF.text = String(score); if (score == 5 && !portal1Generated) { newPortal(); warpsound.play(); portal.visible = true; portal1Generated = true; // 标记为已生成,后续不再触发 } else if (score == 10 && !portal2Generated) { newPortal_2(); warpsound.play(); portal2.visible = true; portal2Generated = true; } else if (score == 15 && !portal3Generated) { newPortal_3(); warpsound.play(); portal3.visible = true; portal3Generated = true; }
这样每个传送门只会被生成一次,完全符合你“达到特定分数时仅生成对应传送门”的需求。
内容的提问来源于stack exchange,提问作者webdog
相关产品推荐
相关产品推荐

