首先要指出的是:DisplayObject实例的属性和graphics.draw*是一样的(x,y,...)参数无关紧要。原生Canvas中有一个的概念,例如:ctx.rect(x,y,width,height)。于是天真地以为DisplayObject的应该和原生API一一对应,结果给了我一记耳光,Graphics和DisplayObject的关系那篇文章有提到。后来认真想了想,确实不能把DisplayObject的和原生绘图API的参数联系起来。因为Container实例是“概念性”DisplayObject实例,所以它没有本地绘图API。DisplayObject的是如何实现的?其实DisplayObject的都是通过原生API------ctx.transform(即“矩阵变换”)实现的。说到矩阵,css3的transform和DisplayObject的矩阵可以一一对应:CSS3--transfromCreateJS.DisplayObject--matrixtranslate(x,y)transform-originrotate(degX,degY)rotationscale(scaleX,scaleY)skew(degX,degY)translate/rotate/scale/skew/transform-originmatrix-CSS3中的这些方法或属性会最终转化为矩阵。“Matrix”是一种数学工具,所以“DisplayObject的//rotation//最终会转化为原生Canvas的ctx.transform”。关于“矩阵”的入门知识可以看看:http://www.zhangxinxu.com/wor...这里有一个知识点:transform-origin相当于矩阵中的translate。同理:DisplayObject的和都是translate生效。当在DisplayObject实例上设置时,实例的位置会发生变化,因为CreateJS执行translate(-regX,-regY)。虽然清楚了DisplayObject的//rotation//属性的工作原理,但还是需要通过源码来验证CreateJS:DisplayObjectisrendering使用两种方法时:updateContext&draw。实际上,updateContext在绘制之前被调用。其实与DisplayObject的draw方法无关,几乎所有的操作都集中在updateContext上。所以只看updateContext,如下:https://www.createjs.com/docs...786行的代码是:ctx.transform(mtx.a,mtx.b,mtx.c,mtx.d,TX,泰);这一步只是说明DisplayObject的底层实现使用了ctx.transform,并不代表“DisplayObject的//rotation//最终会是转换为原生Canvas的ctx.transform”。回头看780行this.getMatrix(mtx):https://www.createjs.com/docs...getMatrix的代码如下:p.getMatrix=function(matrix){varo=this,mtx=矩阵&&matrix.identity()||新的createjs.Matrix2D();返回o.transformMatrix?mtx.copy(o.transformMatrix):mtx.appendTransform(o.x,o.y,o.scaleX,o.scaleY,o.rotation,o.skewX,o.skewY,o.regX,o.regY);};调用this.getMatrix(mtx)后,mtx的属性将被重置。matrix是Matrix2D的一个实例。Matrix2D的源码如下:https://www.createjs.com/docs...通过阅读Matrix2D的源码,很明显a,b,c,d,tx,ty都来自propertiesDisplayObject实例的://rotation//。自此下面的结论是正确的:“DisplayObject的//rotation//最终会转化为原生Canvas的ctx.transform”