我想我在这里遗漏了一些东西。我有一个超级简单的案例,我想将标志用作信号量。如果我按 [green flag] 设置值回到 0 就可以了。如果我按 [space],则在播放声音后不会设置标志。我在这里错过了什么吗?消息处理程序内部会发生什么?下一次调用消息处理程序是否超过了它?
问问题
142 次
1 回答
2
问题是如何调用消息。
我对你的代码做了这个测试。
当循环触发消息时,计数器会递增,向您显示触发发生的次数。
我做的第一个 bar-press,'test' 增加到超过 4000。换句话说,消息被触发了超过 4000 次!我是一个慢打字员,但事件很快。
现在看来,在 Scratch 中,每条消息广播都会中断前一条消息。由于“播放声音”的执行时间很长,因此 message1 永远不会在没有中断的情况下结束,最终的指令永远不会执行,并且 flag2 不会设置为 0。
有几种解决方法:
将标志设置放在 if 的范围之外。当第二条消息中断第一条消息并运行时,它将标志归零。
使用“并等待”确保当前消息不会被新消息打断。因此没有中断,消息完全执行。
避免消息。使用 scratch 自己的事件循环。你真的需要循环来触发超过 4,000 条消息以 1 次按键吗?让 Scratch 按自己的方式处理事件。
于 2015-10-19T16:46:17.203 回答