1

我想我在这里遗漏了一些东西。我有一个超级简单的案例,我想将标志用作信号量。如果我按 [green flag] 设置值回到 0 就可以了。如果我按 [space],则在播放声音后不会设置标志。我在这里错过了什么吗?消息处理程序内部会发生什么?下一次调用消息处理程序是否超过了它?

https://scratch.mit.edu/projects/82146090/

4

1 回答 1

2

问题是如何调用消息。

我对你的代码做了这个测试。

从头开始的事件循环

当循环触发消息时,计数器会递增,向您显示触发发生的次数。

我做的第一个 bar-press,'test' 增加到超过 4000。换句话说,消息被触发了超过 4000 次!我是一个慢打字员,但事件很快。

现在看来,在 Scratch 中,每条消息广播都会中断前一条消息。由于“播放声音”的执行时间很长,因此 message1 永远不会在没有中断的情况下结束,最终的指令永远不会执行,并且 flag2 不会设置为 0。

有几种解决方法:

将“设置”移到 if 之外

将标志设置放在 if 的范围之外。当第二条消息中断第一条消息并运行时,它将标志归零。

使用“等待”

使用“并等待”确保当前消息不会被新消息打断。因此没有中断,消息完全执行。

在此处输入图像描述

避免消息。使用 scratch 自己的事件循环。你真的需要循环来触发超过 4,000 条消息以 1 次按键吗?让 Scratch 按自己的方式处理事件。

于 2015-10-19T16:46:17.203 回答