切り抜き
Group.setCullingArea() を使えば、矩形の範囲外にある子Actorを描画しなくなる。(カリング処理)でも、少しでも矩形の中にはみ出てるActorはその全体が描画されてしまう。
だから、ある矩形で子Actor共々切り抜きたい時にはそぐわない。
そこで以下の様なGroupをつくっている。子ActorをaddActorして、setCullingArea()するとその矩形で切り抜いてくれる。
(batch.end()を使っているのでStageにたくさん置くと描画が遅くなるよ)
public class CullingGroup extends Group {
private Rectangle mScissorBounds;
public CullingGroup() {
mScissorBounds = new Rectangle();
}
@Override
public void draw(Batch batch, float parentAlpha) {
getStage().calculateScissors(getCullingArea(), mScissorBounds);
batch.end();
batch.begin();
if (ScissorStack.pushScissors(mScissorBounds)) {
super.draw(batch, parentAlpha);
batch.flush();
ScissorStack.popScissors();
}
}
}
ちなみに、ScrollPaneは同じような処理を行なっている。