Discuss Scratch

KimiruHamiru
New Scratcher
500+ posts

100%penについて話し合う所

skyblueball2 wrote:

質問です。
ペンで描画したものに当たり判定を持たせるにはどうしたらよいでしょうか。

「ペンで描画したもの」と「何」の当たり判定か

で話が違ってくると思うのですが、

「ペンで描画したもの」と「スプライト」の当たり判定
であれば、スプライトの方で
<[#1b37da]色に触れた>
のブロックを使えば、わりと簡単にできるかなと思います。
「どの色に当たったことを調べるか」の部分は、ちゃんと考える必要がありますが、ペンで何かを描くプログラムをかいたことのある人なら、試していればわかると思います。


「ペンで描画したもの」と「ペンで描画するもの」の当たり判定
の場合、例えば、「スプライトを表示しないで当たり判定にだけスプライト(コスチューム)を使う」ということができます。(「隠す」じゃなく「幽霊の効果を100にする」ならできるとかちょっとクセはあります。「スキャン(scan)」とか呼ばれてるので、探せば参考になるプロジェクトも見つかると思います)
「ペンで描画したもの」と「表示しないスプライト」の当たり判定が終わった後に、表示しないスプライトのある場所に、改めてペンで描いたりすればよいです。

ということで「ペンで描かれたものは、とくに工夫しなくても、当たり判定を持っている」ということは言えます。

そのうえで…
KimiruHamiru
New Scratcher
500+ posts

100%penについて話し合う所

「ペンで描画したもの」と「ペンで描画するもの」の当たり判定で「スプライト(コスチューム)は使わない!
という話題になると、急に難度が上がります。

基本的な考え方は、
「画面のどこに何を描いたか」を「変数(もしくはリスト)に記録しておいて」、
そのデータと「画面のどこに何を描くか」の情報を使ってやることになるかなと思います。

すごいおおざっぱには、たとえば
画面が4x4ドット、「まんなかのちょっと左上」にペンで何かを描いた状態
□□□□
□■□□
□□□□
□□□□
は、
「16マス分の情報」
0000
0100
0000
0000
として表現できます。
さらに、変数として扱いやすそうな形で
0000010000000000
みたいな「16個(16文字)分のデータ」として扱うことができます(変数じゃなくリストの形でもいいです)。

16個の情報がぜんぶ0なら「画面に何も描かれていない」
16個の情報がぜんぶ1なら「画面が塗りつぶされている」
という情報です。

で、
「これから描くもの」の位置が
左上なら、この16文字の1文字目、
右下なら、この16文字の16文字目、
まんなかちょっと左上なら、この16文字の6文字目、
を調べれば、そこに何か描かれているかわかるので、当たり判定ができる。

という感じです。

画面が4x4より大きかったり、「これから描くもの」が1x1より大きい場合は、処理も複雑に、処理時間もとても長くなっていくので、効率化のために工夫が必要になってくるかと思いますが、考え方はこの延長になるかなと思います。
Himmajin_Scratch_3rd
Scratcher
11 posts

100%penについて話し合う所

skyblueball2 wrote:

質問です。
ペンで描画したものに当たり判定を持たせるにはどうしたらよいでしょうか。
リストを使って、リスト内の変数360個作り、特定の色などを1、それ以外を0にして、他のペンで描画したものにもリストを作り、
リストとリストを一行ずつ足し算し、1列1列検査して、2が含まれたら触れているとするのはどうでしょう。
1つのリスト複数の物体を管理する必要がある場合、先頭に0か1か2以外の文字を入れるといいと思います。
追記
2じゃなくて、2以上でした。すみません。

Last edited by Himmajin_Scratch_3rd (Jan. 31, 2025 23:09:53)

ke1002
Scratcher
9 posts

100%penについて話し合う所

skyblueball2 wrote:

質問です。
ペンで描画したものに当たり判定を持たせるにはどうしたらよいでしょうか。
クローンでやってみたらどうでしょうか。(ターボワープで)
または、<()色に触れた>ブロックを使ってみてはいかがでしょうか。
ke1002
Scratcher
9 posts

100%penについて話し合う所

RUKENA
Scratcher
2 posts

100%penについて話し合う所

skyblueball2 wrote:

質問です。
ペンで描画したものに当たり判定を持たせるにはどうしたらよいでしょうか。
前提としてペンで描画したものの情報をすべてリストに記録している状態にしている必要があります。
※ペンで描画した二つのものを「A」、「B」と置きます

丸いものに当たり判定をつける場合、三平方の定理を用いて「A」の半径と「B」の半径を足したものより「A」と「B」の距離が短かった場合が「当たった」ということになります。
参考:https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1070370832/
skyblueball2
Scratcher
100+ posts

100%penについて話し合う所

#541-#546 ありがとうございます!参考にさせていただきます。

Powered by DjangoBB