设置变量在消息处理程序中不起作用

时间:2015-10-19 13:45:39

标签: events mit-scratch

我想我在这里遗漏了一些东西。我有超级简单的情况,我想用旗作为信号量。如果我按[绿色标志]设置值回到0工作就好了。如果我按[空格],播放声音后不会设置标志。我在这里错过了什么吗?消息处理程序中发生了什么是否被下一次调用消息处理程序所取代?

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

1 个答案:

答案 0 :(得分:2)

问题在于如何调用消息。

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

Event loop in scratch

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

我做的第一次压条,'测试'增加到超过4000.换句话说,消息被激活超过4000次!我是一个慢打字员,但事件很快。

现在看来,在Scratch中,每个消息广播都会中断前一个消息。作为播放声音'如果执行时间很长,则message1永远不会中断,最终指令永远不会执行,而flag2也不会设置为0。

有几种解决方法:

move 'set' outside the if

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

use 'and wait'

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

enter image description here

避免消息。使用临时自己的事件循环。你是否真的需要循环才能为1键按下4,000条消息?让Scratch以其方式处理事件。