这是写完后的画板,你可以在上边点击相应的按钮,画相应的图形。
遗憾的是,不能选择颜色,并且画直线的时候有点问题
下边是全部的代码:
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;
}
}
}
分享到:
相关推荐
这样的画板允许用户绘制图形、线条、形状,并可能支持颜色选择、大小调整、橡皮擦功能等。这个项目可能是基于Python的图形用户界面库,如Tkinter、PyQt、wxPython或Kivy等。 首先,我们要了解Python中的图形用户...
涂鸦和画板功能在许多应用和游戏中都有广泛的应用,比如“你画我猜”这样的社交游戏,用户可以通过画板自由地绘画并分享给其他人猜测。在这个“精简版涂鸦、画板源码.zip”压缩包中,包含了实现这些功能的核心代码,...
FSMC(Flexible Static Memory Controller)是STM32中用于控制外部存储器的模块,通过该模块可以将STM32与外部的液晶屏、SDRAM等存储器或设备接口互联。 液晶触摸屏作为人类与机器交互的重要接口,在嵌入式系统中...
在这个"你画我猜画板源码"中,我们聚焦的是一个基于微信小程序的游戏应用,它实现了"你画我猜"的经典玩法,通过画板功能让玩家可以进行实时的画画互动。 首先,核心组件是canvas,这是一个HTML5中的绘图元素,用于...
玩家可以在虚拟画板上自由绘制物体,这涉及到了图形用户界面(GUI)的设计和绘图技术。在易语言中,开发者可能使用了“画刷”、“画线”、“填充”等绘图命令,实现画板上的动态绘图功能,同时还需要处理用户的鼠标...
"画板"在这里指的是易语言中的图形界面组件,通过它开发者可以实现游戏画面的绘制和更新。"飞机大战"游戏通常包含玩家控制的飞机与敌机的战斗,通过躲避子弹和击落敌机来获得分数。 【标签】"pygame python"虽然在...
《无聊到玩画板-易语言》是一款基于易语言编程环境开发的应用程序,它具有趣味性和实用性,可以作为加载过程中的动态展示,增加用户等待时的互动体验。易语言是一种面向对象的、易于学习和使用的中文编程语言,旨在...
WSL是一款拥有 音乐播放,新闻,壁纸,画板,简易地图,计时器等等功能的小项目,是我自己早期学习时做着玩的,并没上架;UI是自己设计,所以挺吃藕的,粗糙的,没做适配,是在6尺寸下开发的 ,还希望不要嫌弃了O(∩_...
可以拿来做电子签章痕迹,也可以拿来做着玩,也可以拿来学习的demo, 如果大家在参考中遇到什么问题,可以到我们的论坛提问和交流!我们的QQ群:81143085 wpf 学习交流论坛:http://www.kfzly.cn
在这个纯画板版本中,游戏设计者使用了易语言进行开发,使得游戏可以仅通过鼠标或键盘进行操作,大大提升了游戏的可玩性和便利性。 易语言作为中国的本土化编程语言,其设计理念是让编程变得简单易懂。它采用了汉字...
如题,获取360天气的,喜欢的可以拿去玩玩。有自动定位功能,但是不知道还能不能用,最近网路访问有些网址被限制,所以无法测试了,以前是可以的
通过《边玩边学Scratch》,读者不仅可以掌握编程的基本技能,还能培养解决问题的能力、逻辑思维能力和创新能力。书中的每个项目都设计得既有趣又有挑战性,让学习过程充满乐趣。此外,由于Scratch是开源的,因此读者...
《易语言-易语言另类画板》是一个基于易语言开发的图形图像处理软件源码,主要...同时,这个项目也鼓励创新和个性化,因为你可以在此基础上添加更多的表情,甚至扩展到其他类型的图形绘制,提高软件的可玩性和实用性。
在这款游戏中,"画板找不同"的玩法是将两幅看似相同的图画并列展示,玩家需要在限定时间内找出两幅画之间的差异。这种类型的小游戏通常包含多个级别,难度逐渐提升,差异数量也会随着级别的增加而增多。通过这种方式...
这个应用的核心功能是通过网络实时传输绘画动作,使得参与者可以同时在一个画板上进行创作,实现"你画我猜"的游戏体验。 首先,我们要理解"即时涂鸦"的概念。即时涂鸦是指用户可以在一个实时更新的画布上绘制图案,...
Pinterest最初是一个图片聚合网站,用户可以将喜爱的图片“Pin”(类似大头针)到个人的“Board”(虚拟画板)上,形成主题相册。随着时间的发展,它增加了社交元素,如“Repin”功能,允许用户分享好友的图片到自己...
另一方面,网络游戏需要考虑到游戏的可玩性和趣味性,以吸引更多的玩家参与。本文基于HTML5和Canvas技术,结合Jquery库和JavaScript代码实现了一个五子棋游戏。通过Canvas的绘图功能,实现了棋盘和棋子的绘制,并...
这部分代码需要清晰地表达游戏的玩法和目标。 7. **资源管理**:游戏可能包含音效、图像等资源,源码中会涉及到如何加载、释放这些资源,以优化内存使用和提高游戏性能。 通过分析和学习这个源码,你可以了解到...
用的人还是蛮多的(相对于其他同类项目),不过大家都是用来写写小东西玩一玩,没有人用这个做商业项目。pygame其实就是SDL的python绑定,SDL又是基于OpenGL,所以也有人用pygame+pyOpenGL做3D演示什么的。真的要写...
"odin-project-sketchpad"是一个基于浏览器的项目,它巧妙地融合了画板功能和经典的Etch-A-Sketch玩具的玩法,为用户提供了独特的在线创作空间。这个项目是JavaScript技术的杰出展示,它揭示了Web前端开发中的许多...