提供: Japanese Scratch-Wiki

このきじは ひらがなのページがありません。ごめんなさい。編集者向け:作成する
() 色が () 色に触れた
[#000] 色が [#000] 色に触れた
カテゴリ 調べる
タイプ 真偽

() 色が () 色に触れた ブロック調べる真偽ブロック)は、実行するスプライトに含まれる1色を指定して、その色が指定したもう1色に触ったかどうかを判定するブロックである。触れていれば、真(True:はい)を返す。

このブロックは、衝突を調べるときに広く使用されている。

引数

調べる色については、次の2つの方法で指定できる。

  1. ブロック内のカラースウォッチをクリックしてから、指定したい色のある場所までマウスポインターを移動して、その場所をクリックする。この場合、マウスの位置にあわせて、カラースウォッチの色も変化していくので、カラースウォッチがほしい色になったのを確認してそこでマウスをクリックすれば、無事にその色がセットされる (マウスポインターがScratch プロジェクトの外に出ているときは、スウォッチの色が変化しないので注意)。たとえば、マウスポインターの下に青色の上にあるときにクリックすれば、カラースウォッチの色も青色になる。
  2. カラースウォッチに演算ブロックを入れる。この場合、次の式を使う:

<(((r) * (65536)) + (((g) * (256)) + (b))) 色が (((r) * (65536)) + (((g) * (256)) + (b))) 色に触れた>

「r」「g」「b」には、Red(赤)、Green(緑)、Blue(青)を0〜256の範囲で標準化した値が入る。


注意

() 色が () 色に触れたブロックは、思っていたのと違う結果になることがある。

仕様上の制限

スプライトが指定した色に触れていないからといって、 () 色に触れたブロックが常に「偽:False」を返すとは限らない。 この原因は、Scratchが色を調べるときの処理時間を減らすことを目的とした[要出典]、実装上の制限によるものである。ステージでは1600万以上の色を表現できる一方、Scratchが正しく処理できる色の数はずっと少ない[1]。これはつまり、『「() 色に触れたブロック」は、異なるけれどよく似た色を調べた場合、「間違った「真」」を返すことが多い』ということだ。多くのScratchersは、この現象に気づかないかもしれない。 しかし、厳密に色を識別したいと思ったときは、このScratchの制限を思い出して我慢しなければいけない。

アンチエイリアス

画像の中には、Scratchペイントエディターではギザギザに見えているものであっても、ステージ上でアンチエイリアス が適用されているものがある。そのため、クリックして色を選択した場合、意図せず、端のほうのアンチエイリアスとして薄くなっている色を選択しないよう注意が必要である。

パフォーマンス

複数のScratchersによると、 () 色が () 色に触れたブロック は、() に触れた (ブロック)に比べると処理速度が遅いので注意が必要である[2]。 「画面を再描画せずに実行する」に指定した 定義 の中で実行するとパフォーマンスが改善するが、同じ定義内で「() に触れた (ブロック) 」を使うと、「() 色に触れた」ブロックが早くなった以上にパフォーマンスが低下する。

使用例

  • スプライト上の1色が、指定した色に触れるまで動かす
 < [#ea235c] 色が [#cba81a] 色に触れた>まで繰り返す
  [スプライト2 v] へ向ける
(10) 歩動かす
end
  • スプライトの1色が特定の色に触れたら何かさせる。たとえば、青色(水)に触れたら、それに反応する
もし <[#ffffff] 色が [#0000FF] 色に触れた> なら
コスチュームを [水を飲んでいる v] にする
(1) 秒待つ
コスチュームを [水を飲んでいない v] にする
end
  • 特定の色のカベにぶつかったら弾丸を止める
<[#ffd700] 色が [#f321a5] 色に触れた>まで繰り返す
 (10) 歩動かす
end
このクローンを削除する
  • スプライトが迷路の行き止まりに到達したかどうかを調べる
ずっと
もし <[#000000] 色が [#007f00] 色に触れた> なら
[あーあ、行き止まり!] と (2) 秒言う

関連項目

出典

  1. https://scratch.mit.edu/projects/10941245/
  2. https://scratch.mit.edu/projects/139152265/