一个不错的StyleManager

从asForm看到一个StyleManager,感觉还不错
主要是提取用swf打包后的skin style

素材打包成swf好处在于 内部进行DefineBitsJpeg3压缩,文件体积比较小,但因为继承MovieClip,不是很轻量
也可以“手动”修改让它继承Sprite。
用jsfl批处理命令的话,写到swf里都是继承MovieClip,我手动修改成Sprite后,复制那条命令,重播一次还是继承MovieClip,比较杯具。

如果把图片直接Embed进主swf,压缩就没前者来的大,文件体积相对也会大些。
所以有好有坏,根据实际情况取舍。

当然如果要用Embed嵌入方式的话,那就用不上了
下面是用动态载入的方式

使用方法很简单,就不介绍了~

package form.core
{
	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;

	import form.events.StyleEvent;

	public class StyleManager extends EventDispatcher
	{
		private var loader:Loader;
		private var appDomain:ApplicationDomain;

		private var _url:String;
		public function get url():String{return _url;}
		public function set url(value:String):void{_url = value;}

		public function loadStyleDeclarations(url:String = null):void
		{
			if(!url || url == "") url = this.url;
			if(!url || url == "") {throw new Error("No skin url found."); return;}
			loader.load(new URLRequest(url));
		}

		private function onLoadComplete(e:Event):void
		{
			appDomain = loader.contentLoaderInfo.applicationDomain;
			StyleManager.getInstance().dispatchEvent(new StyleEvent(StyleEvent.STYLE_COMPLETE));
		}

		private function onLoadError(e:Event):void
		{
			StyleManager.getInstance().dispatchEvent(new StyleEvent(StyleEvent.STYLE_ERROR));
		}

		public function getStyleDefinition(selector:String):DisplayObject
		{
			var s:Class;
			try
			{
				s = appDomain.getDefinition(selector) as Class;
			}
			catch(err:Error){trace(err.message);}
			if(s)
			{
				return new s as DisplayObject;
			}
			return null;
		}

		// Class Instance
		private static var instance:StyleManager;

		public function StyleManager(enforcer:SingletonEnforcer)
		{
			loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
		}

		public static function getInstance():StyleManager
		{
			if(StyleManager.instance == null)
			{
				StyleManager.instance = new StyleManager(new SingletonEnforcer());
			}
			return StyleManager.instance;
		}
	}
}
class SingletonEnforcer {}

SWFSEO框架(转)

# 资讯类型: 翻译
# 来源页面: http://www.pcthomatos.com/swfseo/index.html
# 资讯原标题: SWFSEO
# 资讯原作者: pcthomatos.com

SWFSEO是什么?

SWFSEO是一个允许你使用所有html网站有的优点来创建flash或flex网站的框架.

你可以点击这儿看到它的例子.

http://www.pcthomatos.com/swfseo/gettingstartedexamples.html

升级版本: SWFSEO 1.71现在可以从这里下载 http://swfseo.googlecode.com/files/swfseo.zip

较之前版本的改进:
1. 更新了SWFScroll和UltraLoader
2.新增了TransitionTwoPage.as以允许”交叉淡入淡出过渡”
3.新增了主类SWFSEOPage和SWFSEOTemplate以更好的与SWFSEO进行交互
4.修正了Flash 10编译器的问题

使用SWFSEO框架的优点:

搜索引擎友好性
编译正确后, 在你flash网站上用到的所有文字和图片对搜索引擎都是可见的。你只需要维护一个内容版本,“altContent(alt内容)”才是你网站的实际内容。

便于网页跟踪
所有“页面浏览量”都可以用一个简单的函数跟踪到,或者你也可以自己选择跟踪技术。

强大的预载功能
UltraLoader是一个非常强大的预载器,它可以预载任何类型的资源。资源一旦被加载,他们将被分组管理,这样它们就很容易访问到,甚至可以循环利用。

动态导航
只要你愿意,想创建多少导航按钮就创建多少,想要把子导航分几个层次就分几个。导航可以按你想的以任何方式放置。甚至有些简单的预设可以直接使用。SWFAddress用来做深度链接和访问历史控制。

可拖动的Flash
该功能可以使你做的flash网站界面要多大有多大。当你的flash网站超出浏览器尺寸时可选滚动条就会出现。(*IE6使用自定义的flash滚动条,其它当前流行的浏览器使用浏览器流动条)

与html的几点比较
传统的html和javascript网站有很多的限制:

浏览器不兼容
一个前端开发人员可能浪费20-60%的时间在追踪和调试基于浏览器的漏洞上。而这些时间本该更加有效的利用。

线性体验
用户的体验是线性的:点击,然后等待页面加载。过渡和运动都非常的有限。虽然“web 2.0”的出现改善了用户体验,但其与flash比较起来还是相形见绌。具有讽刺的是,web 2.0的许多相同的限制被嵌入到了flash网站中。

字体限制
在html中可以十分方便和安全的使用的字体数量非常少。为了克服这种限制,很多开发人员创建了图像中的文本。

缺少视频支持
直到HTML5被所有的浏览器支持,视频内容才能同时在silverlight和flash中被显示。

使用SWFSEO框架,所有的网站都可以被建成flash站点。然而,并不意味着html的网站会被抛弃。像我们现在这个网站仍能使用html表单良好的工作。不过,如果你想建立“优良的Web体验”或“web上的应用程序”,flash是明智的选择。

as3位操作

目前看到的位操作大部分是用在图形的RGB/ARGB的处理,或者用在swf加密的处理。

下面是最简单的位操作,很容易理解

“<<” bitwise left shift 将 expression1 和 shiftCount 转换为 32 位整数,并将 expression1 中的所有位向左移动指定的位数,该数字由 shiftCount 转换所得的整数指定。

“>>” bitwise right shift 将 expression 和 shiftCount 转换为 32 位整数,并将 expression 中的所有位向右移动一定的位数,该数目由 shiftCount 转换得到的整数指定。

“>>>” bitwise unsigned right shift 该运算符与按位右移 (>>) 运算符基本相同,但不保留原始表达式的符号,因为左侧的位始终用 0 填充。

提取颜色组成成分

//24bit 不包含aphla通道
var color:uint = 0x112233;
00  11  22  33
------------------------------------------
var r:uint = color >> 16;
00  00  00  11
------------------------------------------
var g:uint = color >> 8 & 0xFF;//偏移8位 00  00  11  22 后做与运算
00  00  00  22
------------------------------------------
var b:uint = color & 0xFF;
00  00  00  33
------------------------------------------

//32bit 的ARBG的处理跟上面一样的原理
var color:uint = 0xff112233;
var a:uint = color >>> 24;
var r:uint = color >>> 16 & 0xFF;
var g:uint = color >>> 8 & 0xFF;
var b:uint = color & 0xFF;

合并颜色组成成分
主要是做或运算

//24bit
var r:uint = 0x11;
var g:uint = 0x22;
var b:uint = 0x33;
var color:uint = r << 16 | g << 8 | b;
//32bit
var a:uint = 0xff;
var r:uint = 0x11;
var g:uint = 0x22;
var b:uint = 0x33;
var color:uint = a << 24 | r << 16 | g << 8 | b;