【Scratch 3.0】雪が降り積もる風景 クローンの上限300個を突破する方法(Tips)

スポンサーリンク
雪が降り積もる風景 クローンの上限300個を突破する方法_m

ある日ふと思い立ちました。雪が降り積もる風景をScratchで表現できるのでしょうか?

クローンを使って雪の結晶を無限につくればできると思ってたのですが、途中で何だか様子がおかしいことに気がつきました。

調べてみると同時に存在できるクローンの上限数が300個までであることが判明。

これではやりたいことができません。そこで逃げの手としてスタンプを使った方法がありますのでご紹介します。

この記事を読んでいただくと、クローンを無数にたくさん作りたいけど上限数制限に引っ掛かってしまったので何とかしたい場合の逃げの一手として、スタンプを使ったスクリプトの作り方が分かります。

スクリプトの作り方

完成した動き

1つ1つの雪の結晶はクローンで作っていて、作成したクローンの数を変数に入れてステージ上に表示しています。

クローンの数が上限の300個を超えても、クローンを作り続けています。

【GIFアニメ】
ファイルサイズ削減のため1秒間に1コマで撮影(本当はもっと滑らかに動いています)

雪が降り積もる風景 クローンの上限300個を突破する方法GIFアニメ

【完成図】
ランダムにクローンを生成しているので、毎回少しずつ違う形になってちょっとした芸術作品。

完成したスクリプト

スクリプト全体です。スクリプトは「雪の結晶」1つだけです。

変数
  • 変数:すべてのスプライト用 or このスプライトのみ

スクリプトの説明

ポイント①:クローンをつくる

まずはクローンを作らなければ始まりません。

少し時間を空けて、次々とクローンを作り続けるようにスクリプトをつくります。
そして、クローンを作ったら変数の値を1つずつ増やしていきます。

ポイント②:スタンプしてクローンそのものは削除する

Scratchの仕様によると、クローンは同時に300個までしか存在できません。

そこで、動きが止まったクローンは別にクローンでなくてもいいので、スタンプを押してクローンそのものは削除してしまいます。

上の図①の部分は、雪の結晶が画面の下端近くに来た時と雪だるま(スプライト)に触れたときにスタンプを押してクローンを削除しています。

上の図の②の部分は、雪の結晶クローンが100個を超えていて、なお且つ「スタンプされた雪の結晶」と「クローンの雪の結晶」が触れた場合(色で判定)にスタンプを押して、クローンそのものを削除しています。

こうすることで、クローンを1個削除したらクローンをつくる余裕が1個分増えることになります。

なおスタンプとは、スタンプする瞬間のクローンの見た目のまま背景に絵を貼り付けることです。背景に絵が貼り付くので、スタンプした後は動かしたりすることはできません。

スタンプを消したいときは、「ペン」カテゴリーの「全部消す」ブロックを使って消します。

スタンプとは

スタンプは、選択中のスプライトと同じ見た目のビットマップ画像を生成して、それをステージ(背景)にスタンプする(貼り付ける)ブロックです。生成された画像はスプライトではないので、これに対してプログラムを指定することはできません。ペンブロックの他のブロックと同じようにスタンプできる対象はステージなので、他のスプライトにスタンプを押して、その見た目を変えることなどはできません。「全部消す」ブロックを使うと、すべてのスプライトによるすべてのスタンプが削除されます。一方、プロジェクトを停止したときはスタンプされた画像はステージ上に残ります。

ここまで作れたら、300個の上限を超えてクローンを作成するプログラムの完成です!

失敗しやすいポイント

今回は失敗しやすいポイントは特にありません。

応用編

少しだけ改良を加えて、雪の結晶が降っている間は色がカラフルに変わるようにしてみました。

雪が降り積もる風景 クローンの上限300個を突破する方法-応用
雪が降り積もる風景 クローンの上限300個を突破する方法(応用)

まとめ

さいごに、クローン上限数制限を突破する場合の逃げの一手として、スタンプを使ったスクリプトの作り方のポイントをまとめます。

  • ポイント①:クローンをつくる
  • ポイント②:スタンプしてクローンそのものは削除する

どうでしたか?上手くできたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)

この記事が『よかった/役に立った』と思ったら、左下のGoodボタンを押していただけると嬉しいです。

タイトルとURLをコピーしました