加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

as3.0实现小涂鸦效果

发布时间:2020-12-15 18:08:00 所属栏目:百科 来源:网络整理
导读:?????? 第一次写博客诶,我看看着格式好不呢。。 ?? ??? 最近学习完了as3.0的基本语法及功能之后,又参照了一下《 魔法塔防》Flash小游戏学习教程二:鼠标画线 的实现,在此基础上添加了取消划线功能,当然还可以直接添加清空功能,代码如下: ?????? 首先是

?????? 第一次写博客诶,我看看着格式好不呢。。

?? ??? 最近学习完了as3.0的基本语法及功能之后,又参照了一下《魔法塔防》Flash小游戏学习教程二:鼠标画线的实现,在此基础上添加了取消划线功能,当然还可以直接添加清空功能,代码如下:

?????? 首先是启动的MainSprite

?????? package com.demo.sprite{

????????class MainSprite extends Sprite{
???????????? private var customDrawLine:Sprite;
??????????? ?public function VirtualMouse()
??????????? ?{
?????????????????????? ?//自定义画线
?????????????????????? customDrawLine=new DrawControl(this.stage);
????????????????????? addChild(customDrawLine);

???????????? }

??????? }

?????? }

?????????其实,就是关键的用来画线的类 DrawControl??

public class DrawControl extends Sprite
?{
??//舞台
??private var _stage:Stage;
??//要画的色块
??private var _shape:Shape;
??//保存鼠标的前一个点
??private var _oldPoint:Point;
??//线的大小
??private var _lineSize:uint=20;
??//线的最大值和最小值
??private var _lineMax:uint=20;
??private var _lineMin:uint=8;
??//移动的速度(决定画的线的大小)
??private var _mouseSp:uint=10;
??//线条的颜色
??private var _lineColor:int=0xffffff;
??//线条数组
??private var shapeArray:Array=new Array();
??public function DrawControl(stage:Stage)
??{
??? //创建并附加模糊滤镜给自己
???var blur:BlurFilter=new BlurFilter();
???blur.blurX=8;
???blur.blurY=8;
???blur.quality=BitmapFilterQuality.LOW;
???this.filters=[blur];
???
???_stage=stage;
???_stage.addEventListener(MouseEvent.MOUSE_DOWN,whenMouseDown);
???_stage.addEventListener(MouseEvent.MOUSE_UP,whenMouseUp);
???_stage.addEventListener(KeyboardEvent.KEY_UP,whenKeyUp);
???//初始化线的大小
???_lineSize=_lineMax;
???
??}
??
??public function whenKeyUp(evt:KeyboardEvent):void{
???var key:String=String.fromCharCode(evt.charCode);

?? //如果按的是r键,那么就进行删除
???if(key=='r'){
????var lastShape:Shape=shapeArray.pop() as Shape;
????if(lastShape!=null){
?????? removeChild(lastShape);
?????? lastShape=null;
????}
???}
??}
??public function whenMouseUp(evt:MouseEvent):void{
???trace("Up");
???_shape.graphics.endFill();
???_stage.removeEventListener(MouseEvent.MOUSE_MOVE,whenMouseMove);
??}
??public? function whenMouseDown(evt:MouseEvent):void{
???
???//判断删除画的_shape
//???if(_shape){
//????removeChild(_shape);
//????_shape=null;
//???}

???this._shape=new Shape();
???shapeArray.push(_shape);
???addChild(_shape);
???_shape.graphics.lineTo(mouseX,mouseY);
???//开始画线
???_shape.graphics.lineStyle(_lineSize,_lineColor,1,false,"normal");
???_stage.addEventListener(MouseEvent.MOUSE_MOVE,whenMouseMove);
???_oldPoint=new Point(mouseX,mouseY);
??}
??
??public? function whenMouseMove(evt:MouseEvent):void{
??????? var newPoint:Point=new Point(mouseX,mouseY);
???? //计算两点之间的距离
???? var distance:Number=Point.distance(_oldPoint,newPoint);
???? _oldPoint=newPoint;
???? //根据两点之间的距离长短来判断要画线的大小
???? if(distance>=_mouseSp){
????? _lineSize-=2;
???? }else{
????? _lineSize+=2;
???? }
???? //判断不让线大小,超出最大值和最小值
???? if(_lineSize>_lineMax){
????? _lineSize=_lineMax;
???? }else if(_lineSize<_lineMin){
????? _lineSize=_lineMin;
???? }
???? _shape.graphics.lineStyle(_lineSize,"normal");
???? _shape.graphics.lineTo(mouseX,mouseY);
??}
?}

好,看下运行效果,写了个 你 ,然后我们在按r键删除画好的线

?????????

好的,基本上实现了划线和删除的功能,算是一个小涂鸦了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读