这几天要做flex chart,看她们做的3d图很是漂亮,自己也做了个简单3d的拼图~
简单介绍下它的画法:首先确定一个起始点,然后开始 画柱体的上面部分,再画画柱体的前面,侧面,
当然了,画面的顺序你自己可以定,先画那个面都可以。
先放个效果图出来看看:
代码如下:首先是自定义的as组件(这里主要贴画法的部分):
// 画柱体的上面部分 matrix.createGradientBox(wi, xx, (270/180)*Math.PI, ox, oy); g.beginGradientFill("linear",colors,alphas,ratios,matrix); graphics.moveTo(ox,oy); graphics.lineTo(ox+wi,oy); graphics.lineTo(ox+wi-xx,oy+xx); graphics.lineTo(ox-xx,oy+xx); graphics.endFill(); // 画柱体的前面, colors = [lighter,fillColor]; alphas = [1,1]; ratios = [0,127]; matrix.createGradientBox(wi, he, Math.PI/2, ox-xx, oy+xx); g.beginGradientFill("linear",colors,alphas,ratios,matrix); g.drawRect(ox-xx,oy+xx,wi,he); g.endFill(); //画右侧面 colors = [fillColor,lighter]; alphas = [0.7,0.7]; ratios = [0,255]; matrix.createGradientBox(xx, he+xx, (270/180)*Math.PI, ox+wi-xx, oy+xx); g.beginGradientFill("linear",colors,alphas,ratios,matrix); g.moveTo(ox+wi-xx,oy+xx); g.lineTo(ox+wi,oy); g.lineTo(ox+wi,oy+he-xx); g.lineTo(ox+wi-xx,oy+he+xx); g.endFill();
说明一下, g.beginGradientFill("linear",colors,alphas,ratios,matrix);是线性变化填充,g.beginFill()代替
下面是mxml页面代码(主要):
<mx:Panel id="panel" verticalCenter="true" horizontalAlign="true" title="自定义3d柱状图"
width="80%" height="90%" alpha="1" paddingBottom="0"
paddingLeft="0" paddingTop="0" paddingRight="0">
<mx:ColumnChart id="cs" width="70%" height="80%">
<mx:horizontalAxis>
<mx:CategoryAxis id="haxis" categoryField="@name"/>
</mx:horizontalAxis>
<mx:series>
<mx:ColumnSeries maxWidth="20" yField="undo" maxColumnWidth="25" displayName="@name"
>
<mx:itemRenderer>
<mx:Component>
<local:RollOverBoxItemRenderer color="#8888E0" downColor="#8888E0" overColor="#8888E0"/>
</mx:Component>
</mx:itemRenderer
>
</mx:ColumnSeries>
</mx:series>
</mx:ColumnChart>
注意:红色的部分
源文件如下: