「終わるまで○○の音を鳴らす」

こんにちは。たいらです。
今回は、Scratchで作ったプログラムがうまく動かないという相談があり、ちょっと調べて解決した備忘録です。

起きていた現象は、思っているより早くスプライトが透明になってしまうということでした。

「終わるまで○○の音を鳴らす」を使っていたので、音が鳴り終わったら透明になるはずですが
動かしてみると確かに音が鳴っている最中に透明になっていく。

なんでかなぁと眺めていると、そのコードのすぐ横に、別のメッセージを受けて動く、同じような処理の塊がありました。
実際に動かすと、何故かそのブロックもブロックの周りが光っていて処理中であることがわかりました。

もしやと思って、片方の処理を削除して動かしてみると、正常に動くようになりました。

何が起きていたかというと、「終わるまで○○の音を鳴らす」というブロックで音が鳴っているときに
別の「終わるまで○○の音を鳴らす」で同じ音が鳴り出すと、最初に再生された音は終了して次の処理に進むことがわかりました。

下記の動画を見てください。

変数A、変数Bともにスタートがクリックされたら0にして、「ニャー」と音をならし、1にするというコードです。

この場合、変数A側の音が先に再生され、一瞬遅れて変数B側の音が再生されます。
すると変数Aは0になった瞬間に1になり、変数Bはニャーっと鳴り終わった後に1になるので少し遅れて1になります。

バージョン1.4ではどうなるかが気になったので、同じことをやってみると違った結果になりました。

こちらは、同じ音がなっても、それぞれが鳴り終わってから次の処理に進むようです。
なので変数A、変数Bともにほぼ同時に0から1に変わっています。

気づけてよかった。