【スクラッチ】雪の砂時計を作ってみました。-This is a snow hourglass by scratch.

2021年12月2日木曜日

Scratch プログラミング

t f B! P L




雪の砂時計を作ってみました。




スクラッチで大量のスプライトをクローンして当たり判定を処理させるとどれぐらいまで出来るかを試してみようと思い「砂時計」を作ってみることにしました。


スプライトの数をコントロールできるように砂を「雪」にして溶かして消えることで継続してスプライトを出し続けられるようにしています。


動きをYouTubeの動画にしてみました。




スクラッチのプロジェクトリンクはこちら↓です。



プログラミングのポイント


背景




背景は「Woods」という元々スクラッチに入っている絵を使いました。

何でもいいのですが、「白(0,0,0)」に対して「雪」が当たり判定をしているので砂時計を置くところに白が無いものを選びました。

あと、雪が見やすいように夜の背景がぴったりでした。


「背景」のコードは↓ これだけです。



グローバル変数を初期化するだけですが1つしか作りませんでした。






「砂(=雪)」のスプライトを砂時計の中にたくさんクローンさせようかと思っていましたが、予想以上に処理落ちをしてしまい見栄えをよく(雪がたくさん振っているように)するため「雪」出現の回転をあげるため水に触れたらすぐに消えるようにしました。

砂時計の中の雪は、すぐに消えると山にならないのでしばらく時間が経ってから気温で溶けている風に消しています。


表示端末によっては凄く処理落ちしているかも・・・^^;


「水」にコードはありません。



障害物(=砂時計の入れ物)




「砂(=雪)」が「(障害物)に触れた」ブロックをつかって当たり判定に使っています。

砂が引っかかって止まらないような形であれば何でも大丈夫です。
特に細くなっているところは何回か幅を調整しました。

「砂(=雪)」は「当たり判定用」のコスチュームと「見た目用」のコスチュームがあるので、「当たり判定用」でスムーズに流れるようにしています。

あと、垂直(下に向かって真っすぐ)の部分を作ってしまうと落下する砂が常にぶつかってゆっくり落下してしまったので、全体的に曲線になるようにしています。

(砂がたまらないように気を付けました)


「障害物」は最初コードが無かったのですが、多少変化がないと寂しい感じがしたので色をグラデーションさせつつフェードを繰り返すようにしました。

完全に透明になっても当たり判定は有効なので、「障害物」の形をなぞります。


「障害物」のコードです。



あまり深く考えずに適当に数値を入力しました。

sinを使うと一定範囲を繰り返す数値を簡単につくれます。




砂(=雪)




最初は「当たり」のコスチュームにしてプログラムを作って、ほとんど組み終わったら「雪玉」を使って表示されるように進めました。


1フレームで生成できるクローンの数は300個なのですが、出した瞬間に処理落ちが始まりました。

当たり判定がけっこう重たい処理のようです。
(当たり判定の無いスプライトだと300個だしても処理落ちしない)

1フレームで一気に出すのはやめて0.1秒間隔で出し続けるようにしました。

「砂(=雪)」は、「障害物」「水」に加えて雪自身である「白い色」との判定を入れています。

そうしないと砂の山を作れないのです。。。


砂は基本的に真下に進みますが、進めない場合は次の方法で行先を探索します。


探索1

「真下(180度)から右(95度)へ10度ずつ方向をずらす」
「8歩進んでぶつからなかったらその向きにする」

探索2

「真下(180度)から左(265度)へ10度ずつ方向をずらす」
「8歩進んでぶつからなかったらその向きにする」


上記探索1と2をどちらから行うかはランダムにしています。
進む方向が見つかったら探索を終わります。


「砂(=雪)」のコードは少し多いのでプロジェクトを直接見てください。


以上でプログラミングのポイントは終わりです。

「障害物」のコスチュームでいろいろな形に変えてオリジナルの砂時計を作ることができるのでよかったら試してみてください。


追記:

判定するときにずらす角度を1度から10度に変えました。

8歩だと28方向ぐらいにしか移動できないので不要な判定をざっくりと除外した形になります。これですこし多く雪を出すことができるようになったので、最初の初期化処理で雪を200個同時に出現させています。

また、雪が消える時間もある程度ランダムになるように変更しました。

ちょっとだけよくなったかな?^^


この記事を最後まで読んで頂きありがとうございました。


他の作品記事もよければ読んでみてください。


このブログを検索

ブログをよくする

自己紹介

自分の写真
はじめまして。はるはるです。 中2の息子と小5の娘を抱える2児の父です。今はゲーム会社で働いています。 子供のプログラミング学習に協力できるように教え方を勉強中です。 このブログでは簡単なゲームを作りながら自分が学んだことを少しずつ共有していきます。 情報処理の試験をたまに受けます。 第二種情報処理技術者 ソフトウェア開発技術者 基本情報処理技術者 応用情報処理技術者 twitter: https://twitter.com/amaruchan007

連絡フォーム

名前

メール *

メッセージ *

QooQ