吉里吉里のlayerのindexについて

マニュアルには、

標準では、前景レイヤ 0 が 1000、前景レイヤ 1 が 2000 ( 以降 1000 ずつ増える )、 メッセージレイヤ 0 が 1000000、メッセージレイヤ 1 が 1001000 ( 以降 1000 ずつ増える )、  メッセージ履歴を表示するためのレイヤが 2000000 となっています。

となってるのですが、例えばこんな構成になってた時、

レイヤー index
メッセージレイヤー0 1001000
前景レイヤー1 2000
前景レイヤー0 1000
背景レイヤー 0

前景レイヤー0を前景レイヤー1の上に持ってきたくて、
[layopt layer=0 index=3000]
とすると、、、

レイヤー index
メッセージレイヤー0 1001000
前景レイヤー0 3000
前景レイヤー1 2000
背景レイヤー 0

↑こうなるかと思いきや、

レイヤー index
前景レイヤー0 3000
メッセージレイヤー0 1001000
前景レイヤー1 2000
背景レイヤー 0

、、、と、前景レイヤー0がメッセージレイヤーの上まで飛び出してしまいます。

で、吉里吉里のコンソールで、各レイヤーの順番を調べようとすると、、、
kag.fore.messages[0].order = (int)2
kag.fore.layers[1].order = (int)1
kag.fore.layers[0].order = (int)3
kag.fore.base.order = (int)0

、、、となってて、ちなみにだけど、これらのレイヤーにindexっていうメンバー変数は存在しません。

そこで、最初に戻って、
[layopt layer=0 index=2]
[layopt layer=1 index=1]

と指定してやると、

レイヤー order
メッセージレイヤー0 3
前景レイヤー0 2
前景レイヤー1 1
背景レイヤー 0

と、想定していた順序になりました。


htmlのz-indexなんかとは挙動が異なり、マニュアルにあるあのレイヤー番号の記述は、一番最初にレイヤー構成を敷く時にあのデカい数値順に並べられる、というだけで、
一旦レイヤーが並べられた後はそれらの数値は廃棄され、後は各レイヤーはそれぞれのorder属性に基いて重ねられてるだけのように見えますね。
([laycount]タグでレイヤーの数を変更するとレイヤーの重ね順がリセットされる、という理屈もそう考えると腑に落ちます)

従って後からその重ね順を変更する[layopt]のindex数値は、そのorderを上書きするってコトみたいです。


あと、[layopt]でindexを変更すると、[laycount]等でレイヤー順序がリセットされない限り、通過記録を前に戻ったりしてもそのまんまのorderが残ってしまうようです。
なのでシーンを「前に戻る」で遡ったりすると人物の前後関係がひっくり返って妙なコトになってたりします。

そんなわけで、あんまり使い勝手は良くないですね>index変更


「吉里吉里のlayerのindexについて」への1件のフィードバック

  1. うーん・・・ただコレ、ひょっとすると僕がKAGWindowクラスやMessageLayerクラスを継承する独自クラス作った時に、何かヘマやってる可能性もなくはないですね。
    先日別件で、関数のオーバーライドで取りこぼしがあったの見っけましたから。

コメントを残す