#やりたいこと
①問題文・解答の選択肢を表示
②選択肢をクリック
③正誤判定
④次の問題に遷移
というのを作る際に、②でダブルクリックをしてしまっても
次の問題に移れないor2回目のクリックを次の問題の解答として判断されてしまう
ということが無いようにしたい。
答えだけ欲しいとき
→「できた!」の項目の2枚目の画像
#問題点
Scratchには既存のイベントや制御にダブルクリック判定が存在しないため
自分でなんとか組む必要がある。
onClickはあるけどonDblClickは無いという状態。
#NG①
選択肢のスプライトをダブルクリックすると、次の問題に移れなくなる。
改めてクリックしても問題遷移できず、最初からやり直すしかなくなる。
1秒待っている間に次のクリックが来てしまい、
「次の背景にする」と「statusを0にする」が動いていないっぽい。
ダブルクリック後、statusは1になっていた。
#NG②
NG①で1秒待つのがダメそうだったので、待たないようにしてみた。
すると今度は、2回目のクリックが次の問題の解答として扱われてしまい、2問一気に進んでしまう。
改善
NG①のelse側に問題遷移とstatusを0にする処理を入れたところ、少しやりたいことに近づいた。
この時点でのNG
- ダブルクリック後に問題遷移が不可能になることはなくなったが、もう一度クリックする必要がある。
- ダブルクリックしたときに、たまに音が2回再生されて1つの問題で2回解答したことになることがある。
これ以上このソースは改善の仕方が分からなくなったので
設計からやり直し。
#できた!
①問題文・解答の選択肢を表示
②選択肢をクリック
③正誤判定
④次の問題に遷移
②と③、③と④の間でクリックが割り込んだ場合に、そのイベントを無視すると成功するはず。
ということで、ステータス管理を2種類(問題遷移したか・正誤判定完了したか)にして、
一気に正誤判定や問題遷移をしていたところをメッセージのやり取りに変更してみたら成功した。
というところで、このコードだとisCheckFinishedの存在意義が無いことに気づいたので、isCheckedFinishedを削除。
動きました。
画像だけだと説明が足りないとこを補完
- sendAnswarを送ると別のスプライトがそれを受け取って正誤判定を行い、完了すればcheckFinishedを送ってくれる
- readyを送ると別のスプライトがそれを受け取って問題遷移の処理を行い、ページ変更を送ってくれる
これで、問題遷移が完了するまではいくらクリックしても問題なしのはず。
##NGの何がNGだったのか(理解できたら追記)
NGがそもそもなんで動かなかったのか、改善したやつの改善の何が不十分だったのか。。。