AS3 Data Structures For Game Developers
Monthly Archives: 二月 2010
短暂
古典电脑
一个不错的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;





