createjs 全局 getTransformedBounds
createjs global getTransformedBounds
我想获得一个位图(或其他容器)全局边界,即应用旋转、缩放、位置等后舞台上容器的边界.
我有以下情况
var stage = new createjs.Stage("canvas");
var parent = new createjs.Container();
parent.x = 50;
parent.rotation = 90;
stage.addChild(parent);
var image = new Image();
image.src = "https://s.imgur.com/images/access/access-logo.png";
image.onload = handleImageLoad;
function handleImageLoad(event) {
var image = event.target;
var child = new createjs.Bitmap(image);
parent.addChild(child);
stage.update();
console.assert(child.getTransformedBounds().width === 65);
console.assert(child.getTransformedBounds().width === 187);
}
参见:https://jsfiddle.net/2kr23/48/
图片是187宽65高,但旋转90度后,我希望它是187高65宽。
EaselJS 目前没有办法获取嵌套对象的全局边界,但是有几种方法可以解决这个问题。
在您的特定情况下,您可以简单地获取父级的边界:
parent.getTransformedBounds().width
https://jsfiddle.net/2kr23/51/
一种更通用的方法是使用 localToGlobal()
在全局坐标 space 中找到 4 个角的位置,然后使用最小和最大范围来获取转换后的边界。
类似于:
function getGlobalBounds(child) {
var tl = child.localToGlobal(0, 0);
var tr = child.localToGlobal(child.image.width, 0);
var br = child.localToGlobal(child.image.width, child.image.height);
var bl = child.localToGlobal(0, child.image.height);
var minX = Math.min(tl.x, tr.x, br.x, bl.x);
var maxX = Math.max(tl.x, tr.x, br.x, bl.x);
var minY = Math.min(tl.y, tr.y, br.y, bl.y);
var maxY = Math.max(tl.y, tr.y, br.y, bl.y);
return new createjs.Rectangle(minX, minY, maxX-minX, maxY-minY);
}
我想获得一个位图(或其他容器)全局边界,即应用旋转、缩放、位置等后舞台上容器的边界.
我有以下情况
var stage = new createjs.Stage("canvas");
var parent = new createjs.Container();
parent.x = 50;
parent.rotation = 90;
stage.addChild(parent);
var image = new Image();
image.src = "https://s.imgur.com/images/access/access-logo.png";
image.onload = handleImageLoad;
function handleImageLoad(event) {
var image = event.target;
var child = new createjs.Bitmap(image);
parent.addChild(child);
stage.update();
console.assert(child.getTransformedBounds().width === 65);
console.assert(child.getTransformedBounds().width === 187);
}
参见:https://jsfiddle.net/2kr23/48/
图片是187宽65高,但旋转90度后,我希望它是187高65宽。
EaselJS 目前没有办法获取嵌套对象的全局边界,但是有几种方法可以解决这个问题。
在您的特定情况下,您可以简单地获取父级的边界:
parent.getTransformedBounds().width
https://jsfiddle.net/2kr23/51/
一种更通用的方法是使用 localToGlobal()
在全局坐标 space 中找到 4 个角的位置,然后使用最小和最大范围来获取转换后的边界。
类似于:
function getGlobalBounds(child) {
var tl = child.localToGlobal(0, 0);
var tr = child.localToGlobal(child.image.width, 0);
var br = child.localToGlobal(child.image.width, child.image.height);
var bl = child.localToGlobal(0, child.image.height);
var minX = Math.min(tl.x, tr.x, br.x, bl.x);
var maxX = Math.max(tl.x, tr.x, br.x, bl.x);
var minY = Math.min(tl.y, tr.y, br.y, bl.y);
var maxY = Math.max(tl.y, tr.y, br.y, bl.y);
return new createjs.Rectangle(minX, minY, maxX-minX, maxY-minY);
}