一个纯代码写的AS3按钮类

2008-02-18

有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播放器的瓶颈

2008-02-16

目前还没有人发表评论 | 赶紧发表评论吧| 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标签乱码的通用转码解决



曾经手机拍过的所有回忆

2008-02-03

目前还没有人发表评论 | 赶紧发表评论吧| 1 views

02.jpg
不记得是什么时候照的这个了,也许是一个秋天,也许是2006年的秋天吧。那年秋天,落叶很好看。不过仔细看了日期后,发现是07年1月照的。

007.jpg
12月的时候陪一个女生去广埠屯看笔记本,我非常喜欢这个全白的ASUS本本,还配一个外置DVD刻录机.当时价格一万多,现在想想真是太贵了,是我现在用的惠普3625AU的两倍了.

004.jpg
一直对音频很感兴趣,特别是可视化音频信号和频谱EQ.这是在图书馆看到的一本书,可惜不能借回来看.

校园的雪景组图
038.jpg040.jpg041.jpg042.jpg043.jpg050.jpg051.jpg



武汉,雪一直下

2008-01-28

目前还没有人发表评论 | 赶紧发表评论吧| 1 views

学校主干道学校主干道
自有记忆开始,武汉还从来没有过这么连续的下过雪。虽然没有一直是鹅毛大雪,但至少积少成多的雪量让不少年轻人(包括我)为之兴奋。下雪的天气里,鞋子经常是湿的,天地总是灰蒙蒙一片。
朦胧的投射出远处的静物,白色的幕布下,黑色的行人在舞台上踩出蜿蜒延伸的脚印,给人一种安静的氛围。

这次降雪可以说是成了全国性的降雪,气温一直低于零度让很多地区的水管冻裂,居民用水受阻,无水可用。全国13省市拉闸限电,三峡一条输电线被大雪压跨。不得不说大自然的力量是伟大的。

而我在已经放假之后的现在还留在学校没办法回家,不是因为公路铁路交通中断,而是为了完成一个老板交代的任务继续奋斗。一座桥,困住一个人。

有一首诗:
大雪压青松,青松挺且直。

这首诗我们原来总是把青松换成同学“牛涛”的名字。现在换成我自己吧。希望早日踏上回归的路啊。



原来天气预报的号码已经改了

2008-01-12

目前还没有人发表评论 | 赶紧发表评论吧| 1 views

天气预报短信定制:移动、联通、小灵通用户发TQ到10620121
可惜的是移动梦网上找不到这个服务:由湖北新气象公司提供的省内城市天气业务

冲动是成功的必要前提。
刘若英&光良 – 好久好久

音频片段:需要 Adobe Flash Player(9 或以上版本)播放音频片段。 点击这里下载最新版本。您需要开启浏览器的 JavaScript 支持。



Freelance PHP Developer