Discuss Scratch

kensin3050
Scratcher
100+ posts

意外と知られていないテクニック集

([sprite1 v] の [変数 v])
で、本来このブロックは自分自身を選択することはできない。この場合「sprite1」の中でこのブロックを使う時に「sprite1」を指定することができない。
しかし他のスプライトでsprite1を指定してから、ブロックをsprite1に重ねてコピーすると、sprite1の中で自分自身を指定したこのブロックを使える。

このテクニックが真価を発揮するのは「このスプライトのみ」に設定した変数(以下プライベート変数)とクローンを使う時。
本来クローンには、それぞれに個別のプライベート変数が与えられ、本体のプライベート変数を変更しても、クローンのそれが変わることはない。
しかし上のテクニックを使って作った「自分のプライベート変数」を返す引数ブロックは、例えクローンであっても本体のプライベート変数の値を返す。
クローンにとっては、実質一つで二つ分の変数を使えることになる。上手く使えばブロック量を減らせるかも?
Monmae
Scratcher
6 posts

意外と知られていないテクニック集

ずっとブロックは、ずっと続くという意味ですが「ずっと」ブロックを使わなくても同じような事が出来る方法があります。

◯◯を送るを使ったずっと 英語で失礼します
when green flag clicked
broadcast [◯◯ v]
when I receive [◯◯ v]
broadcast [◯◯ v]
他にもブロック定義でも似たような構造でずっとが作れます。
構造
1 旗が押されたとき→2 ◯◯を送る→3 ◯◯を受け取ったとき→4 繰り返したい内容→ 5 ◯◯を送る→6 3から繰り返す

この方法はずっとのブロックを別の方法で表しただけですので、実用性はほとんどありませんが、ずっとのブロックが何らかの理由で使えなくなった時役立つのかなと思います。この方法をプロジェクトに表した物をこちら
に作りましたので、気になる方は是非ご覧ください。

Last edited by Monmae (Dec. 29, 2024 10:29:29)

inoking
Scratcher
1000+ posts

意外と知られていないテクニック集

Monmae wrote:

他にもブロック定義でも似たような構造でずっとが作れます。
それは終了条件のない再帰呼び出しなので一時的なものでしか使えません。
そのうち破綻します。
こちらを読んでみてください。
f1911018
Scratcher
100+ posts

意外と知られていないテクニック集

隠したいコードがある場合、そのコードの上にコメントを書くで隠すと簡単には見られなくなります。(書きたいコメントがない場合はやめましょう)
hamutako
Scratcher
100+ posts

意外と知られていないテクニック集

centerを使うと、このように文字を真ん中にできる。

そして、この大きい文字は17px、普通の文字は13px、小さい文字は10px
ioqj
Scratcher
500+ posts

意外と知られていないテクニック集

タイマーに関するテクニック的なものです。
Scratchのプロジェクトに埋め込まれているタイマー、あれを一時停止させたい!なんて思ったことはありますか?ありませんよね(!?)
そこで今回は、マウスをクリックしたときにタイマーを一時停止させるスクリプトをご紹介します。

@GreenFlag が押されたとき
タイマーをリセット // 緑の旗が押されたときにタイマーはリセットされるのでこれは省略可
[タイマー2 v] を [0] にする
ずっと
もし <マウスが押された> なら
[タイマー2 v] を (変数タイマー) にする
<<マウスが押された>ではない> まで待つ
タイマーをリセット
でなければ
[変数タイマー v] を ((タイマー)+(タイマー2)) にする
end
end

このスクリプトで、タイマーを一時停止させることができます。反映されるのは、変数「変数タイマー」です。
ただ、デメリットとしては、プロジェクト内でタイマーを使えなくなる、という事です。
場合によっては (2000年からの日数) ブロックを使っても再現できます。

重複はないとみています。

前に作ったプロジェクトの内容をそのまま貼り付けたっていうのは内緒
NeetFX
Scratcher
6 posts

意外と知られていないテクニック集

when green flag clicked
forever
set [ v] to (timer)
end

when [(timer) v] > (foo)
play sound [ v]

このプログラムで、作品内にタイマーを使っていても停止ボタンを押したときに動作をさせることが可能です

Last edited by NeetFX (Jan. 5, 2025 02:59:06)

AI_HABU_A_PENN_sub
Scratcher
80 posts

意外と知られていないテクニック集

変わったテクニックを見つけました!
<(join (変数) [nfinity]) < [1]>
とすることで変数の値が「I」か「i」かのどちらかの場合、「I」の場合trueとなり見分ける事ができます!
真偽は逆になりますが、ほぼ同様の方法でF,I,N,T,Yの5文字についても大小を見分けることができますよ!
使い道は思いつきませんが・・・
f1911018
Scratcher
100+ posts

意外と知られていないテクニック集

broadcast [(自由に値を入れて)]

この、自由に値を入れて、の変数の部分に自由な数字または文字をいれると、その名前のメッセージが送られます。これにより、一つの、メッセージを送るブロックで、色々なメッセージを送ることができます。また、メッセージを受け取るがわも同じことができます。
when I receive [(自由に値を入れて)]
()の中は変数です

Last edited by f1911018 (Jan. 11, 2025 22:21:05)

pnyonyy
Scratcher
89 posts

意外と知られていないテクニック集

f1911018 wrote:

broadcast [(自由に値を入れて)]

この、自由に値を入れて、の変数の部分に自由な数字または文字をいれると、その名前のメッセージが送られます。これにより、一つの、メッセージを送るブロックで、色々なメッセージを送ることができます。また、メッセージを受け取るがわも同じことができます。
when I receive [(自由に値を入れて)]
()の中は変数です
そこのプルダウンのところに入れられても、どこのスプライトに送られるのですか?
kouryou118103
Scratcher
1000+ posts

意外と知られていないテクニック集

メッセージは全てスプライト、クローンに送られるのでは?
pnyonyy
Scratcher
89 posts

意外と知られていないテクニック集

kouryou118103 wrote:

メッセージは全てスプライト、クローンに送られるのでは?
すいません。誤解をしていました。
ioqj
Scratcher
500+ posts

意外と知られていないテクニック集

f1911018 wrote:

(#4329)
この、自由に値を入れて、の変数の部分に自由な数字または文字をいれると、その名前のメッセージが送られます。これにより、一つの、メッセージを送るブロックで、色々なメッセージを送ることができます。また、メッセージを受け取るがわも同じことができます。
when I receive [(自由に値を入れて)]

broadcast [(自由に値を入れて)]
()の中は変数です
ハットブロックには引数ブロックは入れられませんよ。
inoking
Scratcher
1000+ posts

意外と知られていないテクニック集

ioqj wrote:

ハットブロックには引数ブロックは入れられませんよ。
今回引数の話は出ていないと思うのですが。。

メッセージ名を変数にセットしておくということです。
この話ですね。
attoma-ku
Scratcher
32 posts

意外と知られていないテクニック集

f1911018 wrote:

when I receive [(自由に値を入れて)]
()の中は変数です
「when I receive」というハットブロックの引数部分には、文字を入力したり、他のブロックを入れたりできません。
#4333にある「引数ブロック」は、「値ブロックや真偽ブロック」という意味だと思います。
yuito2013
Scratcher
100+ posts

意外と知られていないテクニック集

#4335私もそう思います。やっぱり
-if <(foo) = [1]> then 
-broadcast [メッセ v]
-else
-if <(foo) = [2]> then
-broadcast [ージ v]
-else
-if <(foo) = [3]> then
-broadcast [1 v]
-else
-なんでもない
-end
-end
-end
-定義 なんでもない
-stop [All v]
色々間違えてたので削除

Last edited by yuito2013 (Jan. 12, 2025 10:40:59)

Maruh2013
Scratcher
22 posts

意外と知られていないテクニック集

attoma-ku wrote:

「when I receive」というハットブロックの引数部分には、文字を入力したり、他のブロックを入れたりできません。
#4333にある「引数ブロック」は、「値ブロックや真偽ブロック」という意味だと思います。
では、
fooが “x” の時にx座標を25変え、“y” の時にy座標を25変えたい場合、
broadcast (foo)
when I receive [x v]
change x by (25)
when I receive [y v]
change y by (25)
とすればよいのではないのでしょうか
inoking
Scratcher
1000+ posts

意外と知られていないテクニック集

このテクニック (#4329) の意味を理解していない方もいるようなので再投稿します。

確かにハットブロックに指定するメッセージ名はあらかじめ定義しておく必要がありますが
送るメッセージを「もし」などを使わずに変えられるということです。

#4334 からたどれるこちらを引用します。

inoking wrote:

Scratchスクリプトクイズ #513 ですが
これは実はとんでもない大発見だと思います。

この技を使うと
Scratch が言語としてサポートしていない
「関数ポインタ」や「仮想関数」のようなものを実現できます。


「関数ポインタ」を使うと、例えば
動的に処理が決定される場合に
膨大な「もし~でなければ」を使うことなく記述できます。

・これがテクニックとして使ってよいと言えるものなのか?
・イベントの応答速度は十分早いのか?
などについてはソースを確認したわけではないのですが
一応これで動くようです。

Scratch 3.0 ベータでも動作します。

サンプルを作りました。イベントの動的決定
cotchGO
Scratcher
5 posts

意外と知られていないテクニック集

scratchで、URLとコメントを一緒に使って宣伝する方多いですよね。(例、https://scratch-mit-edu.ezproxyberklee.flo.org/projects/0000000000を見てね。等のコメント。)そういう時、読み込めないやつになってしまう事ってよくありますよね。その時、URLの後にすぐコメントを書き込むとそのリンクの最後の文字がURLから取り除かれた感じで、クリックしてもエラーになることがよくあります。また、コメントにあとすぐに、コピーをしたURLを張り付けても、読み込めず、その場合URLをそのまま書き込んだようなものになって読み込めないというよりこの場合クリックできないことになります。それを防ぐための宣伝のやり方はURLとコメントを別々のコメントにするかURLを貼った後に改行して「ぜひ見てください」みたいにコメントを書き込めば(順番は逆でも可)URLも読み込めます。
abee
Scratcher
1000+ posts

意外と知られていないテクニック集

ja:区切り文字」について調べるとより深い理解が得られると思います。

Powered by DjangoBB