y座標が大きいほど、オブジェクトの重ね順を手前にしたいため、
検索してよく出てきた
depth=-self.y;
を試してみましたが、実行してみると、オブジェクトが表示されなくなるものが
ありました。調べてみると、depth=-50以下のオブジェクトが表示されなくなる
ようです。
結局、ルームの高さを利用して、ルームの最下部に来た時にdepthが0になるように
depth=room_height-self.y;
としました。
私の実装のせいかもしれませんが...一応ご連絡です。
IDEとRuntimeのバージョンは以下になります。
IDE v2.3.1.542
Runtime v2.3.1.409
40e59d6b76
ねこたみん
通報 ...
IDEが2.2xなので自分で確かめられないのですが、
新規プロジェクトの何もないroomにdepthを-50以下にしたオブジェクトを1つ置いたら表示されるでしょうか。
表示されなければバグなのかなと思います。
IDE v2.3.1.542
Runtime v2.3.1.409
新規プロジェクトを作成し、room内のランダムな座標に、ランダム(-50以下になるよう)depthを持たせて、
適当なオブジェクトを配置してみましたが、再現できませんでした。
参考になるかは分かりませんが、depthの値を正にした場合、ある値を境に画像が描画されなくなるようです。
新規プロジェクトの場合100以上、作成用のプロジェクトだと300以上で描画されなくなりました。
自分も同じ環境(IDE v2.3.1.542、Runtime v2.3.1.409)で試してみましたが再現しませんでした。
ちなみに、room内にBackground layerがある場合、オブジェクトのdepthの値がBackground layerのdepthの値より大きくなると、オブジェクトはBackground layerで上書きされてしまうため表示されません。
新規プロジェクトの場合、Background layerのデフォルトのdepthは100なので、SUPPYさんの投稿の後半で書かれているような現象が起きます。
これはバグではなく仕様だと思います。
Background layerやAsset layer、Tile layerを使用している場合、念のためそれらのdepthの値を確認してみてください。
GMS1の頃は
depth = -y;
のテクニックは広く使われていたようですが、GMS2になりレイヤーの機能が導入されてからは、上で述べたようにdepth = -y;
を使っても思い通りの結果が得られない場合があります。ねこたみんさんの投稿で書かれているように
depth = room_height - y;
のような方法でもこの問題は解決できますが、room外にまでプレイヤーを移動できるようにしたい場合にはdepth = room_height - y;
の方法だと上で述べたのと同じ問題が発生します。そのような場合は、次の動画で紹介されているような手法を使う必要があります。
depth = -y;
に比べるとかなりコード量は増えますが、レイヤー機能との両立が可能です。Backgroundは知らないことだらけなのでとても勉強になります。
まさかそんな仕様があったなんて。ありがとうございます。
お返事が遅くなってしまい申し訳ありません。
新規に作ったプロジェクトで検証したところdepth=-50;でもオブジェクトは表示されました。
なので、私の作り方の問題ですね...。
asaさん、SUPPYさん、makiさん。
お時間を取って調べていただきありがとうございました。
投稿する前に、問題を切り分けて考えられよう、気を付けます。
>FriendlyCosmonautによるdepth systemのチュートリアル
>depth = -y;に比べるとかなりコード量は増えますが、レイヤー機能との両立が可能です。
ざっと見たところ、なかなか複雑そうですね。
でもちゃんとやるならば、これ位必要なんですね。
ありがとうございました。
質問や情報共有があるとGamemakerユーザーみんなの役に立ちますので
気になさらず気楽にサクサクっと投稿してください!
原因がはっきりするといいですね(もしよければ投稿していただけるとうれしいです)。
FriendlyCosmonautさんのシステムは結構複雑ですね。
私は取り入れてませんが、一度これをやってみるのは勉強のチャレンジとしてもいいと思います。