一个AS3做的选色器

这个选色器是我现在天天在折腾的项目中的一部分,界面比较简洁美观的一个东西.

一些有用的flex快捷键

’shift’ + ‘tab’:左移代码;
‘alt’ + ‘/’:代码提示; 或者自己在key里找到 content assist自己设置
‘ctrl’+'o’:快速查找以及指向变量或函数或者mxml组件的id;
‘ctrl’+'d’:删除一行代码; [用它你会上瘾的]
‘ctrl’ + ‘m’:在最大化与还原之间切换获得焦点的窗口; 很常用的啦, 非常方便, 另外双击窗口也可以实现同样的

‘ctrl’ +’e’:快速查找以及指向打开的文件; [在打开的文件很多时尤其实用]
‘tab’:右移代码; [也很常用,非常方便]
‘ctrl’ + ‘~’:代码和设计模式切换;
‘ctrl’ + ‘/’:注釋一行ActionScript代碼[很常用]
‘ctrl’ + ’shift’ + ‘c’:添加或/* */
‘ctrl’ + ’shift’ + ‘d’:添加 ‘ctrl’ + 鼠標左鍵: 快速指向所點擊類文件

Zend Framework 1.10.0rc1 Released

从Zend的官方网站看到,1月22日,Zend Framework Relase到了1.10版本.
官方的新闻地址:http://devzone.zend.com/article/11694-Zend-Framework-1.10.0rc1-Released
官方的下载地址:http://framework.zend.com/download/latest

额~~但是看了一下Release note,好像zend amf部分没有作任何更新,基本上可以无视了.

as3动态文本的透明问题

一直以为要让动态文本有半透明的效果,就一定要把字体嵌入进去。今天忍无可忍,到网上翻了一下。才知道我严重out了。

实际上只要把blendMode属性(也就是混合模式)设为BlendMode.LAYER就可以了,也就是强制为该显示对象创建一个透明度组。

关于blendMode的混合模式,还有一些别的用法。具体可以参照这个类的帮助。

http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/display/BlendMode.html

FLEX中表单验证提示的标记字号设置

如图所示,上面的这个提示,9号字的中文很难看,昨天晚上我郁闷了很久,经过论坛中兄弟的提示,要定义一下.errorTip式样.

.errorTip {
 fontSize: 12;
}

上面的代码,即是表示定义提示标签的字号定义为12号字.
然后,我查了下flex的帮助,才了解到,ErrorTip是把式样定义为errorTip的ToolTip的实例.其默认的式样定义为.

.errorTip {
    color: #FFFFFF;
    fontSize: 9;
    fontWeight: "bold";
    shadowColor: #000000;
    borderColor: #CE2929;
    borderStyle: "errorTipRight";
    paddingBottom: 4;
    paddingLeft: 4;
    paddingRight: 4;
    paddingTop: 4;
}

这个样式定义在framework.swc文件中defaults.css中,如果想对其式样进行更改,只需要重定义一下.errorTip的式样即可.

Imageprocessing Library:一个图象滤镜库

Imageprocessing Library是一个基于as3的简单高效的图像滤镜库。里面包含了五十多种对图片的处理方法。(官方介绍,没有验证)

我是在deface的官方示例中发现这个包的,简单看了一下,发现功能强大,但不是开源的。

官方博客地址:http://blog.joa-ebert.com/imageprocessing-library/

最新版本的swc地址:http://je2050.de/files/source/as3/ImageProcessing.zip

文档地址:http://je2050.de/imageprocessing/

几个示例:

仿PS的曲线工具:http://je2050.de/showroom.php?file=curves

结合pv3d做的一个示例:http://je2050.de/showroom.php?file=roto&f=1

还有一个扩展示例,说不出来的酷:http://www.sephiroth.it/test/flex/2/mixer_papervision/Main.html

两个翻转BitmapData的函数

这几天一直在烦恼图片的旋转啦,切割啦,对座标啦,等等等……

贴几个函数.

//向右旋转90度
public function scaleRight(bmp:BitmapData):BitmapData{
var m:Matrix = new Matrix();
m.rotate(Math.PI/2);
m.translate(bmp.height,0);
var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false);
bd.draw(bmp,m);
return bd;
}
//向左旋转90度
public function scaleLeft(bmp:BitmapData):BitmapData{
var m:Matrix = new Matrix();
m.rotate(-Math.PI/2);
m.translate(0,bmp.width);
var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false);
bd.draw(bmp,m);
return bd;
}

ZamfBrowser:不错的ZendAMF调试工具

事实证明,经常看看那些开源项目的网站,总是会好处的.我今天逛puremvc的网站就有了一个惊喜,发现了一个基于puremvc的开源东东叫:ZamfBrowser.用这个工具,可以方便的对ZendAMF的php端程序进行测试和调试.

官方网站:http://www.zamfbrowser.org/

项目的SVN地址:http://svn.riaforge.org/zamfbrowser/

从SVN当下来的代码有两个部分,air和php.

air部分的代码,需要在flex中建一个air项目,把puremvc的代码链进来,就可以进行编译了.可以release一个版本出来,自个安装一下.注意:要air运行环境哦.

php部分的代码里面有个示例代码的zip包,实际上用到的只是sourse目录中的ZendAmfServiceBrowser.php文件.

具体使用方法如下:

1)rowser拷到你的项目中.

2)修改你的gateway.php文件.添加如下代码

require_once( "browser/ZendAmfServiceBrowser.php" );
$server->setClass( "ZendAmfServiceBrowser" );
ZendAmfServiceBrowser::$ZEND_AMF_SERVER = $server;

下面就是启动你刚刚装好的的air程序,添加一个服务,第一个框中随便填个名称,第二个框中填gateway.php的地址,就OK了.
下面你就可以对你项目中各个类中的各个方法进行测试了,设定传入的参数,查看传回的结果.
爽吧?
具体的使用帮助,请看官网的:
http://www.zamfbrowser.org/documentation.html

一个声音光谱效果的源码

偶然发现了这个效果,只有一个类,效果狂好.奉上源码

点击下面的[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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Rectangle;
	import flash.media.Microphone;
	import flash.media.Sound;
	import flash.media.SoundMixer;
	import flash.utils.ByteArray;
 
	[SWF( backgroundColor='0', frameRate='35', height='400', width='400')]
 
	public class Main extends Sprite
	{
 
		private var mic: Microphone;
		private var sound: Sound;
		private var bytes: ByteArray;
 
		private var output: BitmapData;
		private var peaks: BitmapData;
		private var displace: Matrix;
		private var rect: Rectangle;
		private var gradient: Array;
		private var darken: ColorTransform;
 
        [Embed(source="song.mp3")]
        public var soundClass:Class;
 
		public function Main()
		{
			sound = new soundClass as Sound;
			stage.addEventListener(MouseEvent.CLICK,onStageClicked);
 
			bytes = new ByteArray();
 
			output = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
			peaks = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
 
			displace = new Matrix();
			displace.tx = 2;
			displace.ty = -1;
 
			darken = new ColorTransform( 1, 1, 1, 1, -2, -2, -2, 0 );
 
			rect = new Rectangle( 0, 0, 1, 0 );
 
			addChild( new Bitmap( output ) );
			addChild( new Bitmap( peaks ) );
 
			stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );
 
			graphics.beginFill( 0 );
			graphics.drawRect( 0, 0, stage.stageWidth, stage.stageHeight );
			graphics.endFill();
 
			gradient = createRainbowGradientArray();
		}
 
		private function onStageClicked( event:MouseEvent ): void
		{
			sound.play();
			stage.removeEventListener(MouseEvent.CLICK,onStageClicked);
		}
 
		private function onEnterFrame( event: Event ): void
		{
			peaks.fillRect( peaks.rect, 0 );
 
			SoundMixer.computeSpectrum( bytes, true, 0 );
 
			var value: Number;
			var height: Number;
 
			var smooth: Number;
 
			for( var i: int = 0 ; i < 256 ; i++ )
			{
				value = bytes.readFloat();
 
				if( i == 0 ) smooth = value;
				else smooth += ( value - smooth ) / 8;
 
				height = 2 + smooth * 0xf0;
 
				rect.x = 8 + i;
				rect.y = 320 + ( i >> 2 ) - height;
				rect.height = height;
 
				peaks.setPixel32( rect.x, rect.y, 0xffffffff );
 
				output.fillRect( rect, 0xff000000 | gradient[i] );
			}
 
			output.draw( output, displace, darken, null, null, true );
		}
 
		private function createRainbowGradientArray(): Array
		{
			var gradient: Array = new Array();
 
			var shape: Shape = new Shape();
			var bmp: BitmapData = new BitmapData( 256, 1, false, 0 );
 
			var colors: Array = [ 0, 0xff0000, 0xffff00, 0x00ff00, 0x00ffff ];
			var alphas: Array = [ 100, 100, 100, 100, 100 ];
			var ratios: Array = [ 0, 16, 128, 192, 255 ];
 
			var matrix: Matrix = new Matrix();
 
			matrix.createGradientBox( 256, 1, 0, 0, 0 );
 
			shape.graphics.beginGradientFill( 'linear', colors, alphas, ratios, matrix );
			shape.graphics.drawRect( 0, 0, 256, 1 );
			shape.graphics.endFill();
 
			bmp.draw( shape );
 
			for( var i: int = 0 ; i < 256 ; i++ )
			{
				gradient[i] = bmp.getPixel( i, 0 );
			}
 
			return gradient;
		}
	}
}

电子乐的波形图

这几天一直在想着怎么把nes游戏里的音频调制出来,于是想起来以前见过的一个8位机音乐demo,稍稍改了一下,把声音波形图打印出来,恍然大悟。原来各种声音就是各种不同的方波,正弦波,三角波的叠加啊。

点击下面的演示程序,开始播放演示音乐,黑线是左声道,白线是右声道。