一个纯代码写的AS3按钮类
有10人发表了评论 | 赶紧发表评论吧| 1 views
因为是第一次用类定义来写,难免代码效率会低.
因为想要用纯代码写一个支持多种频谱效果的AS3播放器,更想将所有需要的东西全都装进包里.因此,没打算用Flash自带的组件,一是组件拖动到库里之后,导出的文件大小呈几何数量级翻倍,二是,借此机会,真正和类亲密接触一回.
首先,将按钮类实现了.发现自己用代码绘制按钮并不难,但是需要很仔细的计算好每个细节,包括鼠标按下按钮之后移出按钮区域又移回来时候的按钮绘制.代码如下,调用的时候还得自己将函数添加到侦听列表中.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.*; import flash.display.GradientType; import flash.geom.Matrix; import flash.display.CapsStyle; import flash.display.LineScaleMode; class coolbutton extends Sprite { private var mybutton:Sprite; private var colormatrix:Matrix; private var colorarray:Array; private var ispressed:Boolean; public function coolbutton(height:Number=32,width:Number=64) { mybutton = new Sprite(); colorarray = new Array(); ispressed = false; colorarray = [0,148,148,255]; colormatrix = new Matrix(); colormatrix.createGradientBox(width,height,Math.PI/2,0,0); mybutton.height = height; mybutton.width = width; graphics.lineStyle(1,0x707070,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.drawRoundRect(3,3,width-1,height-1,3,3); graphics.lineStyle(1,0xF3F3F3,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.beginGradientFill(GradientType.LINEAR,[0xF5F5F5, 0xE0E0E0, 0xCFCFCF, 0xC0C0C0],[1,1,1,1],colorarray,colormatrix); graphics.drawRoundRect(4,4,width-3,height-3,3,3); graphics.endFill(); } public function onhover(event:Event) { var height = event.target.height; var width = event.target.width; if (ispressed) { graphics.lineStyle (1,0x2C628B,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.drawRoundRect(3,3,width-1,height-1,3,3); graphics.lineStyle (1,0x63ACD3,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.beginGradientFill(GradientType.LINEAR,[0xE5F4FC, 0xC4E5F6, 0x98D1EF, 0x6DB6DD],[1,1,1,1],colorarray,colormatrix); graphics.drawRoundRect(4,4,width-3,height-3,3,3); graphics.endFill(); } else { graphics.lineStyle (1,0x3C7FBE,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.drawRoundRect(3,3,width-1,height-1,3,3); graphics.lineStyle (1,0xEFF9FE,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.beginGradientFill(GradientType.LINEAR,[0xF5F5F5, 0xD9F0FC, 0xBEE6FD, 0xA7D9F5],[1,1,1,1],colorarray,colormatrix); graphics.drawRoundRect(4,4,width-3,height-3,3,3); graphics.endFill(); } } public function onout(event:Event) { var height = event.target.height; var width = event.target.width; graphics.lineStyle(1,0x707070,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.drawRoundRect(3,3,width-1,height-1,3,3); graphics.lineStyle(1,0xF3F3FF,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.beginGradientFill(GradientType.LINEAR,[0xF5F5F5, 0xE0E0E0, 0xCFCFCF, 0xC0C0C0],[1,1,1,1],colorarray,colormatrix); graphics.drawRoundRect(4,4,width-3,height-3,3,3); graphics.endFill(); } public function onpress(event:Event) { var height = event.target.height; var width = event.target.width; ispressed = true; graphics.lineStyle(1,0x2C628B,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.drawRoundRect(3,3,width-1,height-1,3,3); graphics.lineStyle(1,0x63ACD3,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.beginGradientFill(GradientType.LINEAR,[0xE5F4FC, 0xC4E5F6, 0x98D1EF, 0x6DB6DD],[1,1,1,1],colorarray,colormatrix); graphics.drawRoundRect(4,4,width-3,height-3,3,3); graphics.endFill(); } public function onrelease(event:Event) { var height = event.target.height; var width = event.target.width; ispressed = false; graphics.lineStyle(1,0x707070,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.drawRoundRect(3,3,width-1,height-1,3,3); graphics.lineStyle(1,0xF3F3F3,1,true,LineScaleMode.NONE,CapsStyle.NONE,null,3); graphics.beginGradientFill(GradientType.LINEAR,[0xF5F5F5, 0xE0E0E0, 0xCFCFCF, 0xC0C0C0],[1,1,1,1],colorarray,colormatrix); graphics.drawRoundRect(4,4,width-3,height-3,3,3); graphics.endFill(); } public function onClick(event:Event) { trace(event.target,'is just being clicked'); } } |
ID3乱码不再是Flash播放器的瓶颈
目前还没有人发表评论 | 赶紧发表评论吧| 1 views
本文的最新更新在此处
有感于frank发布在闪无忧上的一篇文章DataArray之烦人的ID3乱码
它完美的解决了在flash编程中无法正确获得正确的中文ID3信息.
堪称Flash编码史上的一座里程碑
但是有一点点不完整,如果ID3标签本身就是UTF-8编码的,那经过转换出来的信息岂不是又成了火星文了.
看下面一个例子,是几首歌曲的ID3标签和16位的编码以及经过UTF-8转换函数处理之后的标签
HEX: c3 84 c3 a3 c3 97 c3 ae c2 bd c3 bc c2 bb c2 b9 c2 ba c3 83 c3 82 c3 b0
Encoded: 你最近还好吗
originalString: Äã×î½ü»¹ºÃÂð
HEX: e6 97 a5 e4 b8 8d e8 90 bd
Encoded: 鏃ヤ笉钀
originalString: 日不落
HEX: c3 80 c3 ab c3 88 c3 8b
Encoded: 离人
originalString: ÀëÈË
上面HEX代表originalString原始字符串的16位编码,Encoded是原始字符串经过转换后处理的结果.
可以看到本身就是UTF-8的编码比较短,而非UTF-8的编码前面均以c3或者c2开始.那就将c2,c3作为条件来判断是否需要转换.
十六进制的c3就是十进制的195,于是修改为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function EncodeUtf8(str : String):String {
if (str!=null) {
var oriByteArr : ByteArray = new ByteArray();
oriByteArr.writeUTFBytes(str);
for (var i = 0; i trace(oriByteArr[i].toString(16));
}
if (oriByteArr[0]==195 || oriByteArr[0]==194) {
var tempByteArr : ByteArray = new ByteArray();
for (var i = 0; i if (oriByteArr[i] == 194) {
tempByteArr.writeByte(oriByteArr[i+1]);
i++;
} else if (oriByteArr[i] == 195) {
tempByteArr.writeByte(oriByteArr[i+1] + 64);
i++;
} else {
tempByteArr.writeByte(oriByteArr[i]);
}
}
tempByteArr.position = 0;
trace('/');
for (var i = 0; i trace(tempByteArr[i].toString(16));
}
return tempByteArr.readMultiByte(tempByteArr.bytesAvailable,"chinese");
} else {
return str;
}
} else {
return "";
}
} |
经过测试,ANSI和Unicode-BE下的GBK编码能够正确显示,而BIG5编码还是相当顽固和恶心的,不知道在繁体XP作業系統上使用usecodepage会不会好一点
Feb 24th 2008,Update:Flash中Sound的ID3标签乱码的通用转码解决
曾经手机拍过的所有回忆
目前还没有人发表评论 | 赶紧发表评论吧| 1 views
![]()
不记得是什么时候照的这个了,也许是一个秋天,也许是2006年的秋天吧。那年秋天,落叶很好看。不过仔细看了日期后,发现是07年1月照的。
![]()
12月的时候陪一个女生去广埠屯看笔记本,我非常喜欢这个全白的ASUS本本,还配一个外置DVD刻录机.当时价格一万多,现在想想真是太贵了,是我现在用的惠普3625AU的两倍了.
![]()
一直对音频很感兴趣,特别是可视化音频信号和频谱EQ.这是在图书馆看到的一本书,可惜不能借回来看.
武汉,雪一直下
目前还没有人发表评论 | 赶紧发表评论吧| 1 views
![]()

自有记忆开始,武汉还从来没有过这么连续的下过雪。虽然没有一直是鹅毛大雪,但至少积少成多的雪量让不少年轻人(包括我)为之兴奋。下雪的天气里,鞋子经常是湿的,天地总是灰蒙蒙一片。
朦胧的投射出远处的静物,白色的幕布下,黑色的行人在舞台上踩出蜿蜒延伸的脚印,给人一种安静的氛围。
这次降雪可以说是成了全国性的降雪,气温一直低于零度让很多地区的水管冻裂,居民用水受阻,无水可用。全国13省市拉闸限电,三峡一条输电线被大雪压跨。不得不说大自然的力量是伟大的。
而我在已经放假之后的现在还留在学校没办法回家,不是因为公路铁路交通中断,而是为了完成一个老板交代的任务继续奋斗。一座桥,困住一个人。
有一首诗:
大雪压青松,青松挺且直。
这首诗我们原来总是把青松换成同学“牛涛”的名字。现在换成我自己吧。希望早日踏上回归的路啊。
原来天气预报的号码已经改了
目前还没有人发表评论 | 赶紧发表评论吧| 1 views
天气预报短信定制:移动、联通、小灵通用户发TQ到10620121
可惜的是移动梦网上找不到这个服务:由湖北新气象公司提供的省内城市天气业务
冲动是成功的必要前提。
刘若英&光良 – 好久好久
音频片段:需要 Adobe Flash Player(9 或以上版本)播放音频片段。 点击这里下载最新版本。您需要开启浏览器的 JavaScript 支持。


