console
var stage, rect, img;
function init() {
stage = new createjs.Stage("demoCanvas");
img = new Image();
img.src = 'http://www.clarksoncs.com/JavaScriptSamples/EaselJS/green.jpg';
img.onload = handleImageLoad;
}
function handleImageLoad(event) {
rect = new createjs.Bitmap(img);
rect.scaleX = .5;
rect.scaleY = .5;
rect.x = 250;
rect.y = 250;
console.log(rect.regX + ';' + rect.regY);
console.log(rect.regX + ';' + rect.regY);
stage.addChild(rect);
createjs.Ticker.setFPS(30);
stage.update();
}
function tick(event) {
rect.rotation += 8;
stage.update(event);
}
stage.update();
<body onLoad="init();">
<canvas id="demoCanvas" width="2000" height="2000"></canvas>
<p>easeIjs里面所有与位置有关的对象,基本参考系都是左上角!从这个例子可以很直观的看到,旋转原点始终在左上角,regX/X,这两个属性都会改变元素的位置,当我们改变x,y时,,元素左上角的旋转原点也是在变化的,反正原点相对于元素左上角,但是regX就不一样了,regX为正时,会使元素水平左移,就像移动元素的副本一样,原来的左上角的原点依然保留在原来的位置,并不随元素移动,这样就间接实现了定义旋转的原点,说实话,我觉得这个很麻烦,很蠢,开发者应该像css3一样直接定义一个transition-origin,而不是这样复杂的移动而且还容易出错。大概总结一下,想要旋转元素,首先通过x,y来移动元素,然后使用regX/regY来移动元素,把第二次移动regX想象成在copy原来元素一份,直接在原来位置上面移动,将regX移动的元素的中间对准原来元素位置的左上角,这样就实现了重新定义原点。</p>
</body>
* {
margin: 0;
padding: 0;
}