シーンにZ座標を実装する【ツクールMV】

はいどーもこんにちはニートです。
前回書いた「ウィンドウの下に画像を表示する方法」がわりと好評だったので、本日もその続きとしてZ座標を実装してみようと思います。
つまり直感的に位置を変えられるようにしようと、そういうわけなんですね。

実験的なコード

最初は実験的に「こんな風にして動かせたらいいなー」というものを書きます。

注*このコードはまだ動きません。

createSlimeSpriteはいいですね。
単にスライムのスプライトを返しているだけです。

createを見てください。
最初にスライムのスプライトを作成したあと、zプロパティに4を代入しています。
これは「表示の優先度4ですよ」ということです(座標が若いほうが後ろに表示されることを意図しています)。
その後、WindowLayerのz座標を5に設定しています。
これはつまり、「スライムのスプライトはWindowよりも後ろに表示してほしい」ということを意味します。
要は前回作った「Windowの後ろにスライム画像を表示する」と同じことをやっています。

updateを見てください。
sortChildrenは今のところ無視してくださいw
あとで使います。
上キーを押したとき、WindowsLayerのZ座標を3に設定しています。
これは「スライムのスプライト(Z座座標4)よりも後ろに表示してね」ということです。
つまり上キーを押すと、スライムのスプライトがWindowよりも手前に表示されるようになります。

従来の方法(addChildの順番を管理する方法)では画像やWindowの表示順を動的にコントロールするのはひじょーに面倒でした。
ですがもしもZ座標を用いることができれば、これはかなり表示順が楽になりますね。
特に上キーを押したとかの、一定のタイミングで座標を変えるのはなかなかに便利だと思います。

Z座標を実際に実装する

ではScene_MenuにZ座標を実装してみます。
先ほどのコードに以下のコードを足してください。

これだけです。
updateメソッド内で使っていたsortChildrenがありますね。
sortChildrenで画像やらWindowやらのaddChildされた場所を動的に変えています(つまりZ座標の役割を果たすことができる)。

問題点

この機能はもともとTilemapに付属しているものです。
で、わざわざこのZ座標機能を他のオブジェクトにつけていないのは、やっぱり重いからだと思いますw
なので実際に使うなら、もう少しパフォーマンスを考えて実装する必要があるかもしれませんね。
例えば僕ならRxを使って、z座標が変更されたときだけソートを実行する、とかを思いつきました。

終わりに

いかがでしたでしょーか。
ツクールVXとかだとZ座標があったらしいですし、やはりZ座標を直接いじる方が直感的ですよね。
誰かもっとうまく実装してくれないかなー(チラッ)とかしつつ、本日の記事を終わりたいと思います。

ほなまた。

あ、コード全体はこんな感じです。

フォローする