【スクラッチ】雪の砂時計を作ってみました。-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個同時に出現させています。

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

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


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


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


ラベル

3DCG AdSense AI Amazon Echo Blender Blogger cron Cursor DNS Fire TV GCP Github Copilot Google Cloud HTTP iOS IPA iPad iPhone5 JavaScript laravel mySQL nodejs PhotoShop PHP Python Redis Scratch SSH Unity vue.js Webサーバ Windows10 WinSCP イヤーカフ型 イラスト おかし おやつ オリンピック お文具 カイワレ大根 ガチャ きのこ ギフト キャラ弁 クリスマス クレジットカード ゲーミング ゲーミングキーボード ゲーミングマウス ゲーミングマウスパッド ゲーミングモニター ゲームパッド ゴーヤー栽培 コナン サーバ サイクリング サイバーセキュリティ サイバー攻撃 サブスクリプション しりとり すイエんサー スクラッチ スマートウォッチ スライム セキュリティ ゼロトラスト ダイエット タブレット ドズル社 なわとび バーテープ パズル パンダ ぷよぷよ ふるさと納税 プログラミング プロトコル番号 マイクラ マイクロソフト マリオ マンガ メモ ランニングウォッチ ランニングゲーム ワイヤレスイヤホン 異世界 絵本 株関連 鬼滅の刃 健康診断 工作 磁石 自転車 自動化 収益化 書き初め 小学校 松屋 情報処理 情報処理安全確保支援士 辛辛魚 水泳 生成AI 折り紙 川渡し問題 銭天堂 誕生日 段ボール 知育菓子 中学受験 冬鳥 動画 動画編集 日常 認定試験 粘土 福袋 便利な雑貨 母の日 銘酒 料理

このブログを検索

ブログをよくする

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

QooQ