问题
I'm making a rotating rectangle with EaselJS but it doesn't work like I thought.
As I think, if I want to make a square (40x40) which rotates around its center at position x=100, y=100, I will need to set it's registration point to regX=20, regY=20.
//Create a stage by getting a reference to the canvas
stage = new createjs.Stage("demoCanvas");
//Create a Shape DisplayObject.
circle = new createjs.Shape();
circle.graphics.beginFill("red").drawRect(100, 100, 40, 40);
circle.regX = circle.regY = 20;
//Add Shape instance to stage display list.
stage.addChild(circle);
createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener("tick", onTick);
function onTick() {
circle.rotation++;
stage.update();
}
http://jsfiddle.net/ZbZjL/14/
回答1:
You're drawing the rectangle within the shape at the point 100, 100 and then setting the registration point to 20, 20 which means you're rotating a huge shape with a rectangle in one corner of it from (more or less) a point at the opposite corner.
In the following I draw the rectangle at the origin of the new shape and then place the shape itself using the x and y properties:
//Create a stage by getting a reference to the canvas
stage = new createjs.Stage("demoCanvas");
//Create a Shape DisplayObject.
circle = new createjs.Shape();
circle.graphics.beginFill("red").drawRect(0, 0, 40, 40);
circle.regX = circle.regY = 20;
circle.x = circle.y = 100;
//Add Shape instance to stage display list.
stage.addChild(circle);
createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener("tick", onTick);
function onTick() {
circle.rotation++;
stage.update();
}
See fiddle.
来源:https://stackoverflow.com/questions/20331092/easeljs-rotate-a-shape-around-its-center