🚐
Scratchで画面の下にあるスプライトを手前になるように並び替える方法
やりたいこと
scratchで見下ろし型(バードビュー)のゲームを作るときに、スプライトの手前/奥の並び替えを行う必要がある場合があります。
正しくない並び順

正しい並び順

画面の下側にあるスプライトほど手前に表示しないと表示がおかしくなるので、下記のように並び替えを行いたい。これをscratchのコードで簡単に行いたい。
実装
スプライトの配置
下記のように猫を画面中にクローンして配置するケースを考えます


このようにスプライトの重なりがぐちゃぐちゃになります。
順番をコントロールするためにリスト「Y座標リスト」と変数「順番」を作ります


「順番」はスプライトに対して「このスプライトのみ」で作ります
背景に下記のコードを追加します

スプライトに下記のコードを追加します

「並べ替え」が送られたときに、スプライトの順番の並べ替えを行います。各スプライトごとにY座標をソートされた状態になるようにY座標リストに追加していきながら同時に層位置を設定していくようにします。
結果
「並べ替え」実行前

「並べ替え」実行後

適切な並び替えが発生しています。
背景のコードから下記のように都度「並べ替え」を呼ぶようにするとスプライトが動いても自然な並びが維持できます。ただし、scratchをターボモードに設定しておく必要があります。

いろいろなスプライトを混在させる場合
「層調整」メッセージを受けた時の処理を各スプライトに追加する必要があります。
また、正しく大きさの異なるスプライトの順番を調整するために、スプライトの中央を足元(着地しているところ)になるように位置調整する必要があります。


このように位置を調整しておきます。

そうするとこのようにいろんなスプライトが混在していても正しく並び替えられます。
Discussion