flash解构涂料中的应用IV:椭圆工具
时间:2012-12-18 14:09来源:卓想动画http://www.zxgzs.com 作者:QQ:610929375 点击: 次
正如行工具的画笔工具和教训的教训,为椭圆形工具做的第一件事情是设立按钮,这样当它被选择,的积极工
具(和存储_root.isactive),被定义为椭圆形的工具。
做完这些后,我们可以一起来看看在新功能的Flash绘图API 的curveTo。 的curveTo如lineTo的 ,因为它是
连接两个点,但不是画一条直线从点A到点B,而不是绘制一条曲线-它不仅需要的开始和结束点(锚),但控
制的坐标点:点,线曲线向。 控制点的位置决定的开始和结束的锚点之间的曲线的丰满和陡度。
的椭圆工具,我们并不真的需要开始绘制鼠标被按下的那一刻起,我们只需要记得,我们已经定义的位置
_root.linex和_root.liney [/ URL]在我们的第一个onClipEvent事件(鼠标按下),这将是举足轻重的,在
确定的椭圆工具的行为,当鼠标移动时,它的发布。 就像行工具,我们希望在一个新的,空的影片剪辑,让
用户预览的大小绘制圆,当鼠标点击和拖动来创建一个单像素跟踪:
if (_root.isactive=="circle"){ _root.createEmptyMovieClip("ellipsetracker",2) ;
_root.ellipsetracker.lineStyle(1,_root.currentcolor,100) ; _root.ellipsetracker.moveTo
(_root.linex,(_root._ymouse+_root.liney)/2) ; _root.ellipsetracker.curveTo(_root.linex,
_root.liney,(_root._xmouse+_root.linex)/2,_root.liney ) ; _root.ellipsetracker.curveTo
(_root._xmouse, _root.liney,_root._xmouse, (_root._ymouse+_root.liney)/2 ) ;
_root.ellipsetracker.curveTo(_root._xmouse,_root._ymouse,
(_root._xmouse+_root.linex)/2,_root._ymouse) ; _root.ellipsetracker.curveTo(_root.linex,
_root._ymouse, _root.linex,(_root.liney+_root._ymouse)/2 ) ; }
这是放置在onClipEvent事件(鼠标移动),其中包含运动行为的画笔工具和直线工具的脚本进行检查,以确
定的价值_root.isactive设置为“圆”,然后执行里面设置的行动。
的格式的curveTo是类似的lineTo的,在使用线型和必须设置的起点,使用moveTo绘制的曲线的大小,颜色和
不透明度设置。 其余的,但是,可能看起来像希腊,让我们来剖析它。
A曲线开始由使用moveTo(anchorx,锚Ŷ)中定义的锚点,并绘制到两个新的锚点定义的curveTo,与扩口朝向
一个控制点的曲线本身:
_root.ellipsetracker.moveTo(0,0) ; _root.ellipsetracker.curveTo (25,25,50,50) ;
在这个例子中,点(0,0)开始和结束点(50,50)在舞台上绘制的曲线,但对定义的点(25,25)扩口的曲线
。 这是很简单的静态图,但是当它涉及到一些动态的,不断变化的鼠标移动,这是其中的变量进来
为了定义一个完整的圆,你应该有至少四个控制点和4个锚点,所有连接到关闭的圆圈 - 但你有更多的积分,
更顺畅,更完美的圆形圈。 我已经使用的涂料为便于计算锚点的应用程序,如果你将看到在上面的例子中,
一个圆圈已被分成象限明确的出发点和落脚点,每条曲线的开始和结束标记位置鼠标的光标(_root.linex,
_root.liney和_root._xmouse _root._ymouse)。
锚点(图中蓝色部分)计算的定义点之间的中间控制点(和每个控制点包括四个象限)。 每一个的curveTo绘
制一条曲线从A点到B点,然后B点到C点,C点到D点,然后从D到A。
你的头受伤了吗? 我的是。 的curveTo的Flash绘图API中最难的部分是一个理解的,但一旦你掌握了它是非
常有用的,并且很容易。
移动上:只为与该行工具的跟踪,一次的鼠标按钮释放,我们正在打算要到使用清晰(),以明确的椭圆形工
具的跟踪和绘制的最终形状使用的用户指定的颜色和不透明度,这时候与冲程的0:
if(_root.isactive=="circle"){ _root.ellipsetracker.moveTo(_root.linex,
(_root.liney+_root._ymouse)/2) ; _root.layer.lineStyle(0,_root.currentcolor,0) ;
_root.layer.moveTo(_root.linex,(_root._ymouse+_root.liney)/2) ; _root.layer.beginFill
(_root.currentcolor,_root.base.opac) ; _root.layer.curveTo(_root.linex, _root.liney,
(_root._xmouse+_root.linex)/2,_root.liney ) ; _root.layer.curveTo(_root._xmouse,
_root.liney,_root._xmouse, (_root._ymouse+_root.liney)/2 ) ; _root.layer.curveTo
(_root._xmouse,_root._ymouse,(_root._xmouse+_root.linex)/2,_root. _ymouse) ;
_root.layer.curveTo(_root.linex, _root._ymouse, _root.linex,(_root.liney+_root._ymouse)/2 ) ;
_root.layer.endFill() ; _root.ellipsetracker.clear() ; }
使用完全相同的坐标跟踪时,释放鼠标,绘制椭圆形,由用户指定的确切大小和形状,但只使用实心填充。
你会发现两个新的命令以粗体显示:beginFill和 endFill。 首先告诉Flash,它需要填补的 beginFill命令
的API命令后,将被定义为一个封闭的形状,与在内部定义的颜色和不透明度(无论是由变量或十六进制和数
字值)的填充组。 后者告诉Flash什么时候该停止灌装,而不是其他。 双方都必须包括或将无法正常工作。
(责任编辑:卓想动画http://www.zxgzs.com)