Scratch로 더블 클릭으로 이중 전송 방지

2767 단어 Scratch

하고 싶은 일



①문제문・해답의 선택사항을 표시
② 선택사항을 클릭
③정오 판정
④다음 문제로 전환
라는 것을 만들 때 ②에서 더블 클릭을 해도
다음 문제로 옮길 수없는 두 번째 클릭은 다음 문제에 대한 답변으로 판단됩니다.
라는 것이 없도록 하고 싶다.

↓화면 이미지


대답만 원할 때
→「할 수 있었다!」의 항목의 2장째의 화상

문제점



Scratch에는 기존의 이벤트나 제어에 더블 클릭 판정이 존재하지 않기 때문에
스스로 어떻게든 짜야 한다.
onClick은 있지만 onDblClick은 없다는 상태.

NG①



선택의 스프라이트를 더블 클릭하면, 다음의 문제로 옮길 수 없게 된다.
다시 클릭해도 문제 천이할 수 없고, 처음부터 다시 시작할 수밖에 없게 된다.


1 초 기다리는 동안 다음 클릭이 와서,
「다음의 배경으로 한다」와 「status를 0으로 한다」가 움직이지 않는 것 같다.
더블 클릭 후, status는 1이 되었다.

NG②



NG①에서 1초 기다리는 것이 안될 것 같았기 때문에, 기다리지 않게 해 보았다.
그러면 이번에는 두 번째 클릭이 다음 문제의 해답으로 취급되어 버려 2문 단번에 진행된다.



개선



NG①의 else측에 문제 천이와 status를 0으로 하는 처리를 넣었는데, 조금 하고 싶은 것에 접근했다.



이 시점에서 NG


  • 더블클릭 후에는 문제전이가 불가능하게 되지는 않지만 다시 클릭해야 한다.
  • 더블 클릭했을 때에, 가끔 소리가 2회 재생되어 1개의 문제로 2회 해답한 것이 되는 일이 있다.

  • 더 이상이 소스는 개선 방법을 모르기 때문에
    디자인에서 다시 시도.

    할 수 있었다!



    ①문제문・해답의 선택사항을 표시
    ② 선택사항을 클릭
    ③정오 판정
    ④다음 문제로 전환

    ②와 ③, ③과 ④사이에서 클릭이 끼어들었을 경우에 그 이벤트를 무시하면 성공할 것.
    그래서 상태 관리를 2 종류 (문제 천이했는지 · 정오 판정 완료했는지)로하고,
    단번에 정오 판정이나 문제 천이를 하고 있던 곳을 메시지의 교환으로 변경해 보면 성공했다.


    라는 곳에서, 이 코드라면 isCheckFinished의 존재의의가 없는 것을 깨달았으므로, isCheckedFinished를 삭제.
    움직였습니다.



    이미지뿐이라고 설명이 부족한 곳을 보완
  • sendAnswar를 보내면 다른 스프라이트가 그것을 받고 정오 판정을하고 완료되면 checkFinished를 보냅니다.
  • ready를 보내면 다른 스프라이트가이를 수신하고 문제 전이를 처리하고 페이지 변경을 보냅니다.

    이제 문제 전이가 완료될 때까지 아무리 클릭해도 문제 없을 것.

    NG의 무엇이 NG였는지 (이해할 수 있으면 추기)



    NG가 원래 왜 움직이지 않았는지, 개선한 녀석의 개선의 무엇이 불충분했는지. . .
  • 좋은 웹페이지 즐겨찾기