Layer.type = ltBinder

吉里吉里のリファレンスには書いてませんがレイヤタイプにはltBinderというのがあります。


parentが違うレイヤ間の合成は見た目が変になったりしますがparentのレイヤタイプをltBinderにしておけば防止できたりします。

例として赤い矩形の上に緑の矩形を加算合成しています。左がltBinder、右がltAlphaの時の表示です。スクリプトは記事末尾にあります。
ltbinder_test
なぜ右のようになるのかはよく理解できてないです。しかし実際に困ることもあるので、合成しそうだけどparent分けたい部分はltBinderにしておいた方が扱いやすそうです。なおltBinderにするとhasImageは強制的にfalseになります。

var win = new Window();
win.setInnerSize(200, 200);
win.visible = true;

win.onKeyDown = function {
	// キー入力のたびに ltBinder/ltAlpha を切り替え
	if (parentLayer.type == ltBinder) {
		win.caption = "ltAlpha";
		parentLayer.type = parentLayer2.type = ltAlpha;
	} else {
		win.caption = "ltBinder";
		parentLayer.type = parentLayer2.type = ltBinder;
	}
};

// * レイヤ構成 * 
//  primaryLayer  --- 黒
//    + parentLayer
//    |   + childLayer  --- 赤
//    + parentLayer2
//        + childLayer2 --- 緑(Additive)
var primaryLayer = new Layer(win, null);
var parentLayer  = new Layer(win, primaryLayer);
var parentLayer2 = new Layer(win, primaryLayer);
var childLayer   = new Layer(win, parentLayer);
var childLayer2  = new Layer(win, parentLayer);

primaryLayer.setSize(win.innerWidth, win.innerHeight);
primaryLayer.fillRect(0, 0, primaryLayer.width, primaryLayer.height, 0xFF000000);
primaryLayer.visible = true;

setParentLayer(parentLayer);
setParentLayer(parentLayer2);

setChildLayer(childLayer, 25, 25, 0xFFFF0000);
setChildLayer(childLayer2, 75, 75, 0xFF00FF00);

childLayer2.type = ltAdditive;

function setParentLayer(layer) {
	layer.setSize(win.innerWidth, win.innerHeight);
	layer.type = ltAlpha;
	layer.visible = true;
}

function setChildLayer(layer, x, y, color) {
	layer.setSize(100, 100);
	layer.setPos(x, y);
	layer.fillRect(0, 0, layer.width, layer.height, color);
	layer.visible = true;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です