Browse > Home

| Subcribe via RSS

Gumbo Skinning:强大的Flex4组件皮肤自定义功能

06月 9th, 2009 | No Comments , 404 views | Posted by flashlizi in Flex4(Gumbo)

Flex4与flex3相比有着非常大的变化,而全新的组件皮肤自定义(Gumbo Skinning)最能集中体现flex4的优点。组件功能逻辑与显示分离,布局独立于组件,统一的组件皮肤自定义方式,再加上FXG(Flex Graphics)强大的绘图功能,我们甚至可以抛弃PS、CS3等工具,完全用MXML定制出非常漂亮的组件。

下面是我今天做的一套flex4的组件皮肤,无任何外部图形,大家可以看一下flex4 skinning的效果(需要安装flash player10):


点击下载源文件>>>

Flex 4系列:认识flex 4中的命名空间namespace

06月 4th, 2009 | No Comments , 309 views | Posted by flashlizi in Flex4(Gumbo)

Flex 4(gumbo)定义了如下3个命名空间:

1、xmlns:fx=”http://ns.adobe.com/mxml/2009″
这是MXML 2009版的命名空间,它包含了AS3的最顶层(top-level)的基本元素,如Object、Array、Boolean、String、Number、Vector、XML等,详细列表可参看Flex SDK下的framwork目录下的mxml-2009-manifest.xml清单文件。另外,它还包括了一些MXML编译器的标签,如<fx:Script>、<fx:Style>、<fx:Binding>、<fx:Metadata>、<fx:Component>、<fx:Declarations>等。

2、xmlns:mx=”library://ns.adobe.com/flex/halo”
这是Helo组件的命名空间,它包含了所有mx包里的组件。详细列表可参看Flex SDK下的framwork目录下的halo-manifest.xml清单文件。

3、xmlns:s=”library://ns.adobe.com/flex/spark”
这是Spark组件的命名空间,它包含了所有spark包和flashx(新的文本布局组件textLayout)包里的组件。另外,为了方便,它还包含了mx包里的RPC相关的类和states、graphics、effect等,当然你仍然可以使用mx命名空间来使用这些类和组件。详细列表可参看Flex SDK下的framwork目录下的spark-manifest.xml清单文件。

如果你用gumbo来开发或编译flex3的项目的时候,你仍然可以使用flex3的MXML命名空间xmlns:mx=http://www.adobe.com/2006/mxml,但是它不能和MXML 2009的fx命名空间混合使用。

想了解更多内容的话,你可以参看MXML 2009说明书

创建高性能AIR程序的几点提示

05月 22nd, 2009 | No Comments , 1,007 views | Posted by flashlizi in Adobe AIR

1、尽量降低应用程序的帧频frameRate。如12,7等。
2、动态改变frameRate来适应程序的需要。当需要展示一个动画的时候,可以临时增加帧频来让动画更加平滑顺畅,动画完成后再把帧频降低。另外,当AIR程序在后台运行的时候,可以把帧频调至0.1甚至0,并临时注销一些ENTER_FRAME或Timer事件处理器,这样能有效降低AIR程序的空闲资源的占有。
3、尽量少用ENTER_FRAME事件,或者用Timer代替。合并可能的Timer,减少同时处理Timer的数量。

用Flex的编译参数实现AS3程序的自身预加载(Self Preloading)

04月 6th, 2009 | 2 Comments , 1,565 views | Posted by flashlizi in Flex3

记得在很早的时候,我在blueidea上写过一个关于as3自身加载的帖子,基本思想和as2中的原理类似,而且还曾被人批评为帧的概念太根深蒂固,as3中要完全抛弃frame。今天,我的一个flashdevelop的as3项目需要做个loading,我不觉得一个小swf去加载大的swf文件是一种很好的loading解决方案。 因为用的是flex sdk,没法像flash CS3那样创建帧,又不想创建一个fla文件,所以原来的办法似乎没法用了。

于是我翻出以前bit-101上的一片经典的as3自身加载的文章:Preloaders in AS3,仔细看看后,发现原来的想法是正确的,只不过在flex中靠的是元数据标签Frame来增加一个工程关键帧类factoryClass,而这个类在flex项目中默认为mx.managers.SystemManager,并由此控制flex程序的preloading实现。说白了,就是flex程序的其实都是2帧,第一帧默认是SystemManager类的实例,第二帧才是我们的Application文档类mxml。再进一步查看flex的as3 compiler的源程序,也证实了这点。

可是,当我用元数据标签Frame来加入preloading的时候,编译后的swf文件尺寸陡增,原来当用元数据标签Frame加入factoryClass的时候,就会编译很多flex框架类到swf中来,显然这不是我所期望的,这个方法也行不通。但用双帧原理来做preloading是显然的,因此问题的关键便在于如何创建一个双帧的swf。

当我在flex的as3 compiler的源程序中寻找的时候,突然在flex的编译程序mxmlc的编译参数中看到了一个高级可选参数frames.frame,搜索后找到这个参数在flex-config.xml中的具体用法:
<frames>
      <!-- frames.frame: A SWF frame label with a sequence of classnames that will be linked onto the frame.-->
      <!-- frames.frame usage:
      <frame>
         <label>string</label>
         <classname>string</classname>
      </frame>
      -->
</frames>

这个参数用mxmlc的cmd命令行参数模式为:
-frames.frame label classname

于是我在flashdevelop的项目属性的compiler options里的Additional Compiler Options里加入是一个已有但并未编译到文档类里的类FrameTwoClass:
-frames.frame FrameTwoClass FrameTwoClass
果然,在编译后的swf文件的classes里可以看到一个Frame 2: FrameTwoClass的类,因此便很容易知道,这个参数可以帮我们创建帧并链接到一个指定的类。

到这里为止,我想大家应该都差不多已经知道怎么实现self preloading了吧。创建一个Preloading类并设置为文档类,把我们真正的主程序Application类用刚才的参数frames.frame编译到第二帧上。在Preloading类中用enterframe事件监听loaderInfo的bytesLoaded和bytesTotal从而显示加载进度,当加载完后,利用反射方法getDefinitionByName()来创建真正的主程序Application类的实例,大功告成!

点击查看 demo源文件

Tags:

Debug flash apps with firebug

03月 26th, 2009 | No Comments , 430 views | Posted by flashlizi in Flash CS3/AS3

大家应该都有用firebug的经验,现在提供2个类Console和Trace,Console可以将指定的debug的内容输出到firebug的控制面板,Trace则可以在firebug的console中trace页面中的flash里的对象和属性等。使用示例如下:
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public var version:String = "version 1.0";
public var info:Object = { name:"debug_demo", author:"alex", date:"2009-3-26" };
public function Main():void
{
Console.log("This a flash debug demo!");
Console.dump(info);
Trace.bind('main', this);
}
}
}

上面示例在firebug中的输出和trace截图如下:
firebug_screenshot

源文件和Demo下载>>>

用MSNContact Library获取MSN联系人列表

02月 25th, 2009 | 4 Comments , 672 views | Posted by flashlizi in Flash CS3/AS3

这是最近在做的一个项目中的一部分,功能就是根据你的MSN帐户和密码获取MSN好友列表。不过要注意因为此组件需要连接微软的MSN远程服务,所以会有安全沙箱问题,在debug状态或者添加了全局安全设置之后就不会报安全错误,当然最适合在AIR项目中使用了。
点击下载SWC组件>>

使用方法:
import com.riaidea.msn.MSNAccount;
import com.riaidea.msn.MSNContact;
var email:String = "your email address";
var password:String = "your msn password";
var account:MSNAccount = new MSNAccount(email, password);
account.addEventListener(Event.INIT, initHandler);

function initHandler(evt:Event):void
{
account.removeEventListener(Event.INIT, initHandler);
//在MSNAccount发出INIT事件后,即可用getContacts()方法获取Contact数组列表。
//数组的每个元素都是一个MSNContact对象,包含id,email,nickname三个属性。
for each(var c:MSNContact in account.getContacts())
{
trace(c); //或trace(c.id, c.email, c.nickname);
}
}

Javascript-based Pixel Bender Explorer

02月 25th, 2009 | No Comments , 465 views | Posted by flashlizi in Adobe AIR, Silverlight

animsPixel Bender是一项让人非常激动的图像视频特效处理功能。

Pixel Bender Explorer则是一个可以演示如何在基于JS的AIR应用程序中使用Pixel Bender创建各种特效的浏览工具。

效果还是很不错的,只是Pixel Bender的运行效率不是太理想,资源占用率很高。

Tags:

AIR 1.5.1 Released

02月 25th, 2009 | No Comments , 395 views | Posted by flashlizi in Adobe AIR

AIR更新到了1.5.1,这一次是很小的更新,只修正了一些bug,不过还是包含了一个很小的特性。AIR应用程序可以手动启动,也注册为用户登陆时自动启动,但是在1.5.1之前的版本中,AIR应用程序无法辨别是登陆时自动启动的还是由用户手动启动的。

在很多情况下,程序需要在登陆自动启动时避免打开新窗口,而用户手动启动时打开新窗口,现在我们可以利用1.5.1中的InvokeEvent.reason来实现这个功能了。InvokeEvent.reason可以是以下两个值:
login //表示登录时自动启动
standard //表示由用户手动启动

AS3类: BigInt(大整数)

02月 22nd, 2009 | No Comments , 1,553 views | Posted by flashlizi in Flash CS3/AS3

最近在一个项目中计算一个64bit的密钥key的时候,需要用到超过64位的数字运算。大家应该都知道,在AS3.0中,Number数据类型的范围是最大的,它可以使用52位来存储有效位数,即53位以上的数字只是近似值。因此需要到用到Big Integer(大整数),像目前的很多的RSA加密算法就建立于超过512位甚至更大的大数运算。网上找了一下只有hurlant的crypto加密库里面有com.hurlant.math.BigInteger这个类,可惜遗憾的是,这个类还是有位数限制,不能满足我的需求。因此我改写了一个BigInt的js类库,实现了简单的加减乘除取模等运算。由于时间比较紧,改写的代码比较乱,不过还是很好用的,现在分享给需要的朋友。点击下载>>>

下面是使用示例:
var x:BigInt = new BigInt("1234567890123456789012345678901234567890");
var y:BigInt = new BigInt("0x123456789abcdef0123456789abcdef0");
var z:BigInt = x.clone();//复制
z = x.negative();//取相反数
z = BigInt.plus(x, y);//加法
z = BigInt.minus(x, y);//减法
z = BigInt.multiply(x, y);//乘法
z = BigInt.divide(x, y);//除法
z = BigInt.mod(x, y);//取模
var compare:int = BigInt.compare(x, y); //大数比较 return -1, 0, or 1
var num:Number = x.toNumber(); //转为Number类型

Tags:

AIR开发的开心网超级辅助器:SuperKaixin 1.0

02月 3rd, 2009 | 2 Comments , 1,166 views | Posted by flashlizi in Adobe AIR

Alternative content

Get Adobe Flash player

前一段时间玩上了kaixin.com的一些网页游戏,如超级大亨和教父等,而这些游戏绝大部分是体力劳动,极其耗时间。于是便用AIR开发了一个辅助工具,通俗说就是外挂。经过自己和不少朋友的使用,目前发布出来的1.0版的功能方面应该还算很不错的,也保留了一些特别的功能未公开,因为这些功能可能会影响游戏的平衡。现在放到本博上来,当作AIR的一个实验作品吧,有兴趣的可以点击左边的在线安装体验下(详细介绍可以看这里)。

Tags: ,
wow gold wow gold wow gold wow power leveling wow power leveling wow power leveling nike shoes nike shoes nike shoes nike shoes jordan shoes Jordan shoes jordan shoes Jordan shoes world of warcraft gold world of warcraft gold Replica handbags 1