クリッピングする
描画内容のクリッピングするには Pane
を利用します。
凡例
javascript
var pane = new g.Pane({
scene: scene,
width: 50,
height: 50
});
var rect = new g.FilledRect({
scene: scene,
width: 50,
height: 50,
x: 15,
y: 15,
cssColor: "red"
});
// pane に rect を追加。pane の大きさからはみ出す rect の部分は表示されない。
pane.append(rect);
scene.append(pane);
利用例
次のコンテンツは、Pane
の大きさで子要素をクリッピングして表示します。
詳細
Pane
を使うことで描画内容のクリッピングを実現できます。 E
と異なり、 Pane
は子孫要素の描画領域を Pane
の大きさに限定します。 子要素が Pane
の大きさをはみ出して描画しようとした場合、はみ出した部分は描画されません。
Pane
は描画内容をキャッシュしてるため、 Pane
の width
や height
等のプロパティを変更した場合は invalidate()
を呼び出す必要があります。 少し紛らわしい点として、 Pane
が保持している子エンティティの変更時には子エンティティの modified()
や invalidate()
のみを呼び出せばよいという点があります。 子エンティティの変更は Pane
に通知されて自動的にキャッシュの更新が行われます。
下記のコードでは、Pane
の子要素の矩形を回転させています。 矩形オブジェクトの modified()
を呼び出していますが、 Pane
自体のプロパティは変更していないので、 Pane
の invalidate()
の呼び出しはしていません。 シーンをクリックした場合は、 Pane
自体のプロパティを変更しているので invalidate()
を呼び出しています。
javascript
function main() {
var scene = new g.Scene({ game: g.game });
scene.onLoad.add(function () {
var pane = new g.Pane({ scene: scene, width: 50, height: 50 });
var rect = new g.FilledRect({
scene: scene,
width: 50,
height: 50,
x: 15,
y: 15,
angle: 30,
cssColor: "red"
});
pane.append(rect);
scene.append(pane);
rect.onUpdate.add(function () {
++rect.angle;
rect.modified();
});
scene.onPointDownCapture.add(function () {
pane.width = 25;
pane.height = 25;
pane.invalidate();
});
});
g.game.pushScene(scene);
}
module.exports = main;