Flash cs3 中用代码画圆的问题,这是我找到的一段代码,请各位帮下忙,解释下工作原理。
package{
import flash.display.*;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DrawCircleTest extends MovieClip
{
private var _canvas:Sprite;
public function Sprite(){
addFrameScript(0,APP1);
addFrameScript(0,APP2);
return;
}
public function DrawCircleTest():void
{
initCanvas();
registerEventHandlers();
}
private function initCanvas():void
{
_canvas = new Sprite();
_canvas.graphics.beginFill(0xF0F0F0);
_canvas.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_canvas.graphics.endFill();
_canvas.graphics.lineStyle(2, 0x000000);
addChild(_canvas);
}
private function registerEventHandlers():void
{
_canvas.addEventListener(MouseEvent.CLICK, onCanvasClick);
}
private function onCanvasClick(event:MouseEvent):void
{
_canvas.graphics.drawCircle(event.localX, event.localY, 10);
}
}
} 展开
import flash.display.*;
import flash.display.Sprite;
import flash.events.MouseEvent;
类DrawCircleTest继承与display类的子类:MovieClip(影片剪辑)
定义私有属性:_canvas (Sprite类),用于动画的类.
定义pulinc的函数Sprite(),在父类舞台stage里执行:当addFrameScript(0,app1),目标帧数为0,就是时间轴上的播放头播放到指定帧时所执行的指定函数app1.app1该回调函数实际上是一个事件处理函数,下面一个同理。(注:public function Sprite()这样去定义构造函数不赞同的。少用)
该类的DrawCircleTest()构造函数里去解析2个函数,用于初始化:
initCanvas();
registerEventHandlers();
在下面定义上面的2个函数,
_canvas = new Sprite();(不规范)
_canvas.graphics.beginFill(0xF0F0F0);
_canvas.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_canvas.graphics.endFill();
_canvas.graphics.lineStyle(2, 0x000000);
addChild(_canvas);
创建个实例:var _canvas:Sprite = new Sprite();
在舞台中: 开始画矩形(颜色:0xF0F0F0[16进制]) ,注册点(圆心):(x:0; y:0),以舞台的宽和高为准。border为2的0x000000的边框。
private function registerEventHandlers():void
{
_canvas.addEventListener(MouseEvent.CLICK, onCanvasClick);
}
private function onCanvasClick(event:MouseEvent):void
{
_canvas.graphics.drawCircle(event.localX, event.localY, 10);
}
}
}
#该实例注册点击鼠标事件,触发 onCanvasClick(),在 onCanvasClick(),画个圆,相对鼠标的的坐标的x,y轴10倍。(ps:10这个参数不是很清楚,你baidu下吧)。
大概的意思就这样,程序是顺着解析下来,就是该类的构造函数插入2个函数。还有:
addFrameScript(0,APP1);
addFrameScript(0,APP2);
是会在时间轴运行到哪帧时,去调用APP1和APP2 函数。其实这个是个未公开的函数,还可以传多个参数进来:
MovieClip.addFrameScript(0,frame1Method,1,frame2Method, 2,frame3Method);
也就是说可以同时指定多组触发事件,在1,2,3帧上同时指定触发的动作,如果有不止一个动作事件指定在相同的一个帧上,那么,只有后者的动作会被触发~!
完毕,接收吧!(别忘了给分啦。亲)
2024-09-19 广告
我直接把代码贴过来了,注意有2点程序改动和1点舞台改动:
1. 去掉了下面这个方法,这个方法一定是你不小心从别的地方复制过来的,这里完全没用加上反而会报错。
public function Sprite(){
addFrameScript(0,APP1);
addFrameScript(0,APP2);
return;
}
2.initCanvas方法中的语句“addChild(_canvas);”,被改为“cont.addChild(_canvas);”。
3.舞台上,新建一个空的影片剪辑,实例名取为“cont”,拖到舞台上,放在(0,0)点,然后给它画一个扇形的遮罩,就OK了。
一下是代码,关键的地方给你注释了一下。
package
{
import flash.display.*;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DrawCircleTest extends MovieClip
{
private var _canvas:Sprite
public function DrawCircleTest():void
{
initCanvas();
registerEventHandlers();
}
private function initCanvas():void
{
//画了一个长宽和舞台一样,颜色为0xF0F0F0的区域
_canvas = new Sprite();
_canvas.graphics.beginFill(0xF0F0F0);
_canvas.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_canvas.graphics.endFill();
_canvas.graphics.lineStyle(2, 0x000000);
//设置画线的颜色为0x000000,就是你的圆圈的颜色,这里是黑色
cont.addChild(_canvas);
}
private function registerEventHandlers():void
{
_canvas.addEventListener(MouseEvent.CLICK, onCanvasClick);
//帧听鼠标点击事件,点一下画一个圆
}
private function onCanvasClick(event:MouseEvent):void
{
_canvas.graphics.drawCircle(event.localX, event.localY, 10);
//画圈,以鼠标的位置为中心点,半径为10的圆
}
}
}