`
convolute
  • 浏览: 260591 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

画板可以这样玩

    博客分类:
  • Flex
阅读更多

 

 

这是写完后的画板,你可以在上边点击相应的按钮,画相应的图形。

遗憾的是,不能选择颜色,并且画直线的时候有点问题

下边是全部的代码:

package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	
	/**
	 * 画板实现类
	 */ 
	[SWF(width="800",height="600",backgroundColor="#FFFFFF",frameRate="31")]
	public class DrawSprite extends Sprite
	{
		//定义画板的对象
		private var _sprite:Sprite;
		private var item:String = "btnLine";//选择的图形
		private var count:int = 0;
		/**
		 * 构造函数
		 */ 
		public function DrawSprite()
		{
			//实例化显示图形对象
			_sprite = new Sprite();
			//将对象添加到窗体上
			this.addChild(_sprite);
			//设置图形的颜色,为白色
			_sprite.graphics.beginFill(0xffffff);
			//画一个矩形,从0,0开始,到400,400结束。
			_sprite.graphics.drawRect(0,35,400,400);
			//结束
			_sprite.graphics.endFill();
			//给画布添加鼠标监听器方法,设置鼠标按下时,调用onMouseDown方法
			_sprite.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
			//给画布添加鼠标监听器方法,设置鼠标释放时,调用onMouseUp方法
			_sprite.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
			
			var line:RectangleButton = new RectangleButton("直线",50,25);
			this.addChild(line);
			line.x = 10;
			line.y = 10;
			line.name ="btnLine";
			line.addEventListener(MouseEvent.CLICK,onClickHandler);
			var curve:RectangleButton = new RectangleButton("曲线",50,25);
			this.addChild(curve);
			curve.x = 70;
			curve.y = 10;
			curve.name ="btnCurve";
			curve.addEventListener(MouseEvent.CLICK,onClickHandler);
			
			var circle:RectangleButton = new RectangleButton("圆",50,25);
			this.addChild(circle);
			circle.x = 130;
			circle.y = 10;
			circle.name ="btnCircle";
			circle.addEventListener(MouseEvent.CLICK,onClickHandler);
			
			var ellipse:RectangleButton = new RectangleButton("椭圆",50,25);
			this.addChild(ellipse);
			ellipse.x = 190;
			ellipse.y = 10;
			ellipse.name ="btnEllipse";
			ellipse.addEventListener(MouseEvent.CLICK,onClickHandler);
			
			var rect:RectangleButton = new RectangleButton("矩形",50,25);
			this.addChild(rect);
			rect.x = 250;
			rect.y = 10;
			rect.name ="btnRect";
			rect.addEventListener(MouseEvent.CLICK,onClickHandler);
			
			var roundRect:RectangleButton = new RectangleButton("圆角矩形",80,25);
			this.addChild(roundRect);
			roundRect.x = 310;
			roundRect.y = 10;
			roundRect.name ="btnRoundRect";
			roundRect.addEventListener(MouseEvent.CLICK,onClickHandler);
		}
		
		/**
		 * 点击按钮时触发该事件函数
		 */ 
		private function onClickHandler(event:MouseEvent):void
		{
			item = event.target.name;
			trace(item);
		}
			
		/**
		 * 在画板上按下鼠标并且拖动的时候调用该方法。
		 */ 
		private function onMouseDown(event:MouseEvent):void{
			if(item == "btnLine"){
				if(count == 0){
					_sprite.graphics.moveTo(event.localX,event.localY);
					count++;
				}else{
					_sprite.graphics.lineStyle(1,0,1);
					_sprite.graphics.beginFill(0x000000);
					_sprite.graphics.lineTo(event.localX/2,event.localY/2);
					_sprite.graphics.endFill();
					count--;
				}
			}else if(item == "btnCurve"){
				_sprite.graphics.lineStyle(1,0,1);
				_sprite.graphics.beginFill(0x000000);
				_sprite.graphics.moveTo(event.localX,event.localY);					
				_sprite.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
				_sprite.graphics.endFill();
			}else if(item == "btnCircle"){
				_sprite.graphics.lineStyle(1,0,1);
				_sprite.graphics.beginFill(0x000000);
				_sprite.graphics.drawCircle(event.localX,event.localY,30);		
				_sprite.graphics.endFill();
			}else if(item == "btnEllipse"){
				_sprite.graphics.lineStyle(1,0,1);
				_sprite.graphics.beginFill(0x000000);
				_sprite.graphics.drawEllipse(event.localX,event.localY,30,40);		
				_sprite.graphics.endFill();
			}else if(item == "btnRect"){
				_sprite.graphics.lineStyle(1,0,1);
				_sprite.graphics.beginFill(0x000000);
				_sprite.graphics.drawRect(event.localX,event.localY,50,50);		
				_sprite.graphics.endFill();
			}else if(item == "btnRoundRect"){
				_sprite.graphics.lineStyle(1,0,1);
				_sprite.graphics.beginFill(0x000000);
				_sprite.graphics.drawRoundRect(event.localX,event.localY,60,60,4,20);	
				_sprite.graphics.endFill();
			}
			//给画板添加鼠标移动监听器方法
			_sprite.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
		}
		/**
		 * 在画板上释放鼠标按键时,调用该方法
		 */ 
		private function onMouseUp(event:MouseEvent):void{
			//释放的时候,移除鼠标移动的监听方法
			_sprite.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
		}
		/**
		 * 鼠标拖动时,调用该方法
		 */ 
		private function onMouseMove(event:MouseEvent):void{
			if(item == "btnCurve")
			//画直线
			_sprite.graphics.lineTo(event.localX,event.localY);
		}
		
	}
}




package
{
	import flash.display.DisplayObject;
	import flash.display.Shape;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.filters.DropShadowFilter;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	
	public class RectangleButton extends SimpleButton
	{
		//要显示在按钮上的文字
		private var _text:String;
		//存储矩形的宽度和高度
		private var _width:Number;
		private var _height:Number;
		
		public function RectangleButton(text:String,width:Number,height:Number){
			//存储这些值,用于建立按钮状态
			_text = text;
			_width = width;
			_height = height;
			//根据宽度、高度、以及文字之值建立按钮状态
			upState = createUpState();
			overState = createOverState();
			downState = createDownState();
			hitTestState = upState;
		}
		
		//替换按钮的up状态建立显示组件
		private function createUpState():Sprite{
			var sprite:Sprite = new Sprite();
			var background:Shape = createdColoredRectangle(0x33FF66);
			var textField:TextField = createTextField(false);
			sprite.addChild(background);
			sprite.addChild(textField);
			return sprite;
		}
		
		//替换按钮的Over状态建立显示组件
		private function createOverState():Sprite{
			var sprite:Sprite = new Sprite();
			var background:Shape = createdColoredRectangle(0x70FF94);
			var textField:TextField = createTextField(false);
			sprite.addChild(background);
			sprite.addChild(textField);
			return sprite;
		}
		//替换按钮的down状态建立显示组件
		private function createDownState():Sprite{
			var sprite:Sprite = new Sprite();
			var background:Shape = createdColoredRectangle(0xCCCCCC);
			var textField:TextField = createTextField(true);
			sprite.addChild(background);
			sprite.addChild(textField);
			return sprite;
		}
		//建立圆角矩形,以指定之颜色填充
		private function createdColoredRectangle(color:uint):Shape{
			var rect:Shape = new Shape();
			rect.graphics.lineStyle(1,0x000000);
			rect.graphics.beginFill(color);
			rect.graphics.drawRoundRect(0,0,_width,_height,15);
			rect.graphics.endFill();
			rect.filters = [new DropShadowFilter(2)];
			return rect;
		}
		//建立文字栏,用来显示按钮上的文字
		private function createTextField(downState:Boolean):TextField{
			var textField:TextField = new TextField();
			textField.text = _text;
			textField.width = _width;
			//以水平方式把文字摆在中心点
			var format:TextFormat = new TextFormat();
			format.align = TextFormatAlign.CENTER;
			textField.setTextFormat(format);
			//以垂直方式把文字摆在中心点
			textField.y = (_height - textField.textHeight)/2;
			textField.y -= 2;
			//down状态会让文字更往下合往右,有别于其他状态
			if(downState){
				textField.x += 1;
				textField.y += 1;
			}
			return textField;
			
		}
		
		
	}
}

 

3
4
分享到:
评论
2 楼 convolute 2011-05-07  
抱歉,flash还在审批,没有链接地址
1 楼 freewxy 2011-05-05  
没看到上面的图啊

相关推荐

    python实现超级画板

    这样的画板允许用户绘制图形、线条、形状,并可能支持颜色选择、大小调整、橡皮擦功能等。这个项目可能是基于Python的图形用户界面库,如Tkinter、PyQt、wxPython或Kivy等。 首先,我们要了解Python中的图形用户...

    精简版涂鸦、画板源码.zip

    涂鸦和画板功能在许多应用和游戏中都有广泛的应用,比如“你画我猜”这样的社交游戏,用户可以通过画板自由地绘画并分享给其他人猜测。在这个“精简版涂鸦、画板源码.zip”压缩包中,包含了实现这些功能的核心代码,...

    零死角玩转stm32-高级篇-FSMC详解(3.2寸液晶触摸画板

    FSMC(Flexible Static Memory Controller)是STM32中用于控制外部存储器的模块,通过该模块可以将STM32与外部的液晶屏、SDRAM等存储器或设备接口互联。 液晶触摸屏作为人类与机器交互的重要接口,在嵌入式系统中...

    微信小程序你画我猜画板源码

    在这个"你画我猜画板源码"中,我们聚焦的是一个基于微信小程序的游戏应用,它实现了"你画我猜"的经典玩法,通过画板功能让玩家可以进行实时的画画互动。 首先,核心组件是canvas,这是一个HTML5中的绘图元素,用于...

    易语言画板式求合体游戏

    玩家可以在虚拟画板上自由绘制物体,这涉及到了图形用户界面(GUI)的设计和绘图技术。在易语言中,开发者可能使用了“画刷”、“画线”、“填充”等绘图命令,实现画板上的动态绘图功能,同时还需要处理用户的鼠标...

    纯易语言画板制作飞机大战小游戏.zip

    "画板"在这里指的是易语言中的图形界面组件,通过它开发者可以实现游戏画面的绘制和更新。"飞机大战"游戏通常包含玩家控制的飞机与敌机的战斗,通过躲避子弹和击落敌机来获得分数。 【标签】"pygame python"虽然在...

    无聊到玩画板-易语言

    《无聊到玩画板-易语言》是一款基于易语言编程环境开发的应用程序,它具有趣味性和实用性,可以作为加载过程中的动态展示,增加用户等待时的互动体验。易语言是一种面向对象的、易于学习和使用的中文编程语言,旨在...

    ios-iOS开源小项目---集音乐播放,新闻,壁纸,画板,简易地图于一体多功能.zip

    WSL是一款拥有 音乐播放,新闻,壁纸,画板,简易地图,计时器等等功能的小项目,是我自己早期学习时做着玩的,并没上架;UI是自己设计,所以挺吃藕的,粗糙的,没做适配,是在6尺寸下开发的 ,还希望不要嫌弃了O(∩_...

    wpf 画板工具带‘回放功能’(源码)

    可以拿来做电子签章痕迹,也可以拿来做着玩,也可以拿来学习的demo, 如果大家在参考中遇到什么问题,可以到我们的论坛提问和交流!我们的QQ群:81143085 wpf 学习交流论坛:http://www.kfzly.cn

    俄罗斯方块(纯画板,单鼠标或单键盘可玩)-易语言

    在这个纯画板版本中,游戏设计者使用了易语言进行开发,使得游戏可以仅通过鼠标或键盘进行操作,大大提升了游戏的可玩性和便利性。 易语言作为中国的本土化编程语言,其设计理念是让编程变得简单易懂。它采用了汉字...

    360天气,画板绘制-易语言

    如题,获取360天气的,喜欢的可以拿去玩玩。有自动定位功能,但是不知道还能不能用,最近网路访问有些网址被限制,所以无法测试了,以前是可以的

    《边玩边学scratch》

    通过《边玩边学Scratch》,读者不仅可以掌握编程的基本技能,还能培养解决问题的能力、逻辑思维能力和创新能力。书中的每个项目都设计得既有趣又有挑战性,让学习过程充满乐趣。此外,由于Scratch是开源的,因此读者...

    易语言-易语言另类画板

    《易语言-易语言另类画板》是一个基于易语言开发的图形图像处理软件源码,主要...同时,这个项目也鼓励创新和个性化,因为你可以在此基础上添加更多的表情,甚至扩展到其他类型的图形绘制,提高软件的可玩性和实用性。

    画板找不同小游戏-易语言

    在这款游戏中,"画板找不同"的玩法是将两幅看似相同的图画并列展示,玩家需要在限定时间内找出两幅画之间的差异。这种类型的小游戏通常包含多个级别,难度逐渐提升,差异数量也会随着级别的增加而增多。通过这种方式...

    即时远程涂鸦

    这个应用的核心功能是通过网络实时传输绘画动作,使得参与者可以同时在一个画板上进行创作,实现"你画我猜"的游戏体验。 首先,我们要理解"即时涂鸦"的概念。即时涂鸦是指用户可以在一个实时更新的画布上绘制图案,...

    再论Pinterest模式 一种新颖的交互体验而已.docx

    Pinterest最初是一个图片聚合网站,用户可以将喜爱的图片“Pin”(类似大头针)到个人的“Board”(虚拟画板)上,形成主题相册。随着时间的发展,它增加了社交元素,如“Repin”功能,允许用户分享好友的图片到自己...

    基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)-kaic.docx

    另一方面,网络游戏需要考虑到游戏的可玩性和趣味性,以吸引更多的玩家参与。本文基于HTML5和Canvas技术,结合Jquery库和JavaScript代码实现了一个五子棋游戏。通过Canvas的绘图功能,实现了棋盘和棋子的绘制,并...

    易语言画板式求合体游戏源码-易语言

    这部分代码需要清晰地表达游戏的玩法和目标。 7. **资源管理**:游戏可能包含音效、图像等资源,源码中会涉及到如何加载、释放这些资源,以优化内存使用和提高游戏性能。 通过分析和学习这个源码,你可以了解到...

    python+pygame简单画板实现代码实例

    用的人还是蛮多的(相对于其他同类项目),不过大家都是用来写写小东西玩一玩,没有人用这个做商业项目。pygame其实就是SDL的python绑定,SDL又是基于OpenGL,所以也有人用pygame+pyOpenGL做3D演示什么的。真的要写...

    odin-project-sketchpad:一个介于画板和 Etch-A-Sketch 之间的浏览器版本

    "odin-project-sketchpad"是一个基于浏览器的项目,它巧妙地融合了画板功能和经典的Etch-A-Sketch玩具的玩法,为用户提供了独特的在线创作空间。这个项目是JavaScript技术的杰出展示,它揭示了Web前端开发中的许多...

Global site tag (gtag.js) - Google Analytics