Archive for 11月, 2008

  • 一直以来,如果需要加载另外一个SWF,并与之互动的话,都是用Adobe文档中的

    Loader.contentLoaderInfo.applicationDomain.getDefinition(className)

    今天猛然发现,原来Loader加载完成后,是可以直接调用原SWF中的方法以及舞台上的对象:

    1.新建一个target.fla,第一帧代码如下

    function method():void{
    trace("Function on ActionSctipt");
    }
    

    2.在target.fla的舞台上放置一个文本,取名为textOnStage

    3.编译好target.swf文件

    4.加载target的SWF使用下面的代码作为文档类

    package
    {
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLRequest;
    
    public class T1 extends Sprite
    {
    private var loader:Loader = new Loader();
    
    public function T1()
    {
    var req:URLRequest = new URLRequest("target.swf");
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
    loader.load(req);
    }
    
    public function onComplete(e:Event):void{
    Object(loader.content).method();//如果能确定loader.content类型的话,可以直接用类型代替Object,如MovieClip(loader.content)
    trace(Object(loader.content).textOnStage.text);
    }
    
    }
    }
    
  • 直接在Flash Cs4下跑

    var i : uint;
    var t : uint;
    var length : uint = 1000000;
    
    //test Vector
    t = getTimer();
    
    var v:Vector.<String> = new Vector.<String>(length, true);
    for( i = 0; i < length; i ++ )
    {
    v[i] = “1″;
    }
    
    trace(getTimer() - t);
    
    //test Array
    t = getTimer();
    
    var a:Array = new Array();
    for( i = 0; i < length; i ++ )
    {
    a[i] = “1″;
    }
    
    trace(getTimer() - t);
    
  • 1.Vector是为了增加性能而出现的

    2.Vector指定元素类型是为了增加性能

    3.Vector指定长度是为了增加性能

    4.Vector的用法是:

    var v:Vector.<String> = new Vector.<String>(length, fixed);
  • visible ,alpha和removeChild()都可以让对象从舞台上“消失”。

    但是哪种更好呢?或者说哪种方式更适合于什么情况下使用呢?

    这里有篇文章做了详尽的分析

    http://www.insideria.com/2008/11/visible-false-versus-removechi.html

    作者很强大,排列组合了所有的可能性,然后分析,最后的结论是:

    如果对象真的是不用了,那就removeChild()吧,

    如果以后还要用,而且还要照顾到深度管理的问题,那就用visible,

    基本上,Alpha=0是不需要用到的。

  • 前几天装了CS4,几日后打开,提示我需要激活,明摆着,盗版是没办法激活的嘛。猜测,Adobe偷偷的利用互联网做了验证,判断出我用的是D版,郁闷。

    今天不错,在网上看到一个方法,就是把Host配置里,所有和注册有关的URL全指到本机….

    127.0.0.1 activate.adobe.com
    127.0.0.1 practivate.adobe.com
    127.0.0.1 ereg.adobe.com
    127.0.0.1 activate.wip3.adobe.com
    127.0.0.1 wip3.adobe.com
    127.0.0.1 3dns-3.adobe.com
    127.0.0.1 3dns-2.adobe.com
    127.0.0.1 adobe-dns.adobe.com
    127.0.0.1 adobe-dns-2.adobe.com
    127.0.0.1 adobe-dns-3.adobe.com
    127.0.0.1 ereg.wip3.adobe.com
    127.0.0.1 activate-sea.adobe.com
    127.0.0.1 wwis-dubc1-vip60.adobe.com
    127.0.0.1 activate-sjc0.adobe.com

  • package
    {
    	import flash.display.Bitmap;
    	import flash.display.BitmapData;
    	import flash.display.Loader;
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.geom.Matrix;
    	import flash.net.URLRequest;
    	import flash.text.TextField;
    
    	public class Example00 extends Sprite
    	{
    		private var load:Loader;
    
    		public function Example00()
    		{
    			super();
    
    			load = new Loader()
    			var req:URLRequest = new URLRequest("http://i3.sinaimg.cn/home/deco/2008/0325/sinahome_Logo.gif")
    			load.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoad)
    			load.load(req);
    			addChild(load);
    
    		}
    
    		public function onLoad(e:Event):void{
    			var tf:TextField = new TextField();
    			tf.text = "Flash复制对象的Bitmap";
    			addChild(tf);
    
    			var bounds:Object = this.getBounds ( this );
    
    			var mat:Matrix = new Matrix();
    			mat.translate ( -bounds.x, -bounds.y );
    
    			var buffer:BitmapData = new BitmapData ( this.width+1, this.height+1, true, 0 );
    
    			buffer.draw ( this, mat );
    
    			var newBuffer:Bitmap = new Bitmap(buffer)
    
    			addChild(newBuffer)
    
    			newBuffer.x = 100
    			newBuffer.y = 200
    		}
    
    	}
    }
  • 当Adobe、Microsoft、Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来!

    最初来自:http://www.sinoprise.com/read.php?tid-662-page-e-fpage-1.html(遗憾的是这个链接已经打不开了),我基本未改动,只是进行了一些排版和整理。
    参考文献:http://www.fsf.org/licensing/licenses/

    现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses/alphabetical)。我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。

    这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考。

    BSD开源协议(original BSD license、FreeBSD license、Original BSD license)

    BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

    但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

    如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
    如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
    不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
    BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

    Apache Licence 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)

    Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

    需要给代码的用户一份Apache Licence
    如果你修改了代码,需要再被修改的文件中说明。
    在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
    如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
    Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

    GPL(GNU General Public License)

    我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

    GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

    由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

    其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

    LGPL(GNU Lesser General Public License)

    LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

    但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

    GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

    MIT(MIT)

    MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

  • Apache许可证

    2.0版,2004年1月
    http://www.apache.org/licenses/

    译者:Joe 改动:hbW
    使用、重生成及分发的术语和条件:

    1.定义

    “许可证”是指根据本文档第1到第9部分关于使用、重生成和分发的术语和条件。

    “许可证颁发者”是指版权所有者或者由版权所有者批准的授权许可证的实体。

    “法律实体”是指实施实体和进行控制的所有其它实体受该实体控制,或者受该实体集中控制。根据此定义,”控制”是指(i)让无论是否签订协议的上述实体,进行指导或管理的直接权利或间接权利,或者(ii)拥有百分之五十(50%)或以上已发行股票的所有者,或者(iii)上述实体的实权所有者。

    “用户”(或”用户的”)是指行使本许可证所授予权限的个人或法律实体。

    “源程序”形式是指对包含但不限制软件源代码、文档源程序和配置文件进行修改的首选形式。

    “目标”形式是指对源程序形式进行机械转换或翻译的任何形式,包括但不限于对编译的目标代码,生成的文件以及转换为其它媒体类型。

    “作品”是指根据本许可证所制作的源程序形式或目标形式的著作,在著作中包含的或附加的版权通知(在下面附录中提供了一个示例)。

    “衍生作品”是指基于作品(或从作品衍生而来)的源程序形式或目标形式的任何作品,以及编辑修订、注释、详细描述或其它修订等构成原创著作作品的整体。根据本许可证,衍生作品不得包括与作品及其衍生作品分离之作品,或仅与作品及其衍生作品的接口相链接(或按名称结合)之作品。

    “贡献”是指任何著作作品,包括作品的原始版本和对该作品或衍生作品所做的任何修订或补充,意在提交给许可证颁发者以让版权所有者或代表版权所有者的授权个人或法律实体包含在其作品中。根据此定义,”提交”一词表示发送给许可证颁发者或其代表人,任何电子的、口头的或书面的交流信息形式,包括但不限于在由许可证颁发者或者代表其管理的电子邮件清单、源代码控制系统、以及发布跟踪系统上为讨论和提高作品的交流,但不包括由版权所有者以书面形式明显标注或指定为”非贡献”的交流活动。

    “贡献者”是指许可证颁发者和代表从许可证颁发者接受之贡献的并随后包含在作品之贡献中的任何个人或法律实体。

    2.版权许可证的授予

    根据本许可证的条款,每个贡献者授予用户永久性的、全球性的、非专有性的、免费的、无版权费的、不可撤销的版权许可证以源程序形式或目标形式复制、准备衍生作品、公开显示、公开执行、授予分许可证、以及分发作品和这样的衍生作品。

    3.专利许可证的授予

    根据本许可证的条款,每个贡献者授予用户永久性的、全球性的、非专有性的、免费的、无版权费的、不可撤销的(除在本部分进行说明)专利许可证对作品进行制作、让人制作、使用、提供销售、销售、进口和其它转让,且这样的许可证仅适用于在所递交作品的贡献中因可由单一的或多个这样的贡献者授予而必须侵犯的申请专利。如果用户对任何实体针对作品或作品中所涉及贡献提出因直接性或贡献性专利侵权而提起专利法律诉讼(包括交互诉讼请求或反索赔),那么根据本许可证,授予用户针对作品的任何专利许可证将在提起上述诉讼之日起终止。

    4.重新分发

    用户可在任何媒介中复制和分发作品或衍生作品之副本,无论是否修订,还是以源程序形式或目标形式,条件是用户需满足下列条款:

    1. 用户必须为作品或衍生作品的任何其他接收者提供本许可证的副本;并且
    2. 用户必须让任何修改过的文件附带明显的通知,声明用户已更改文件;并且
    3. 用户必须从作品的源程序形式中保留衍生作品源程序形式的用户所分发的所有版权、专利、商标和属性通知,但不包括不属于衍生作品任何部分的类似通知;并且
    4. 如果作品将”通知”文本文件包括为其分发作品的一部分,那么用户分发的任何衍生作品中须至少在下列地方之一包括,在这样的通知文件中所包含的属性通知的可读副本,但不包括那些不属于衍生作品任何部分的通知:在作为衍生作品一部分而分发的通知文本文件中;如果与衍生作品一起提供则在源程序形式或文件中;或者通常作为第三方通知出现的时候和地方,在衍生作品中产生的画面中。通知文件的内容仅供信息提供,并未对许可证进行修改。用户可在其分发的衍生作品中在作品的通知文本后或作为附录添加自己的属性通知,条件是附加的属性通知不得构成修改本许可证。

    用户可以为自身所做出的修订添加自己的版权声明并可对自身所做出修订内容或为这样的衍生作品作为整体的使用、复制或分发提供附加或不同的条款,条件是用户对作品的使用、复制和分发必须符合本许可证中声明的条款。

  • 5.贡献的提交。

  • 除非用户明确声明,在作品中由用户向许可证颁发者的提交若要包含在贡献中,必须在无任何附加条款下符合本许可证的条款。尽管上面如此规定,执行许可证颁发者有关贡献的条款时,任何情况下均不得替代或修改任何单独许可证协议的条款。

  • 6.商标。本许可证并未授予用户使用许可证颁发者的商号、商标、服务标记或产品名称,除非将这些名称用于合理性和惯例性描述作品起源和复制通知文件的内容时。
  • 7.保证否认条款。除非因适用法律需要或书面同意,许可证颁发者以”按原样”基础提供作品(并且每个贡献者提供其贡献),无任何明示的或暗示的保证或条件,包括但不限于关于所有权、不侵权、商品适销性、或适用性的保证或条件。用户仅对使用或重新分发作品的正确性负责,并需承担根据本许可证行使权限时的任何风险。
  • 8.责任限制条款。在任何情况下并根据任何法律,无论是因侵权(包括过失)或根据合同,还是其它原因,除非根据适用法律需要(例如故意行为和重大过失行为)或经书面同意,即使贡献者事先已被告知发生损害的可能性,任何贡献者不就用户因使用本许可证或不能使用或无法使用作品(包括但不限于商誉损失、停工、计算机失效或故障,或任何商业损坏或损失)而造成的损失,包括直接的、非直接的、特殊的、意外的或间接的字符损坏而负责。
  • 9.接受保证或附加责任。重新分发作品或及其衍生作品时,用户可选择提供或为符合本许可证承担之支持、担保、赔偿或其它职责义务和/或权利而收取费用。但是,在承担上述义务时,用户只可代表用户本身和用户本身责任来执行,无需代表任何其它贡献者,并且用户仅可保证、防护并保持每个贡献者不受任何因此而产生的责任或对因用户自身承担这样的保证或附加责任而对这样的贡献者所提出的索赔。条款结束

    附录:如何向用户作品中应用Apache许可证。

    若要向用户作品应用Apache许可证,请附加下列样本通知,将括号”[]“中的字段以用户自身的区分信息来替换(但不包括括号)。文本必须以文件格式适当的注释句法包含在其中。另外建议将文件名或类别名以及目的说明包含在相同的”打印页”上作为版权通知,以更加容易的区分出第三方档案。

    版权所有[yyyy][版权所有者的名称]
    
    根据2.0版本Apache许可证(”许可证”)授权;
    根据本许可证,用户可以不使用此文件。
    用户可从下列网址获得许可证副本:
    
    http://www.apache.org/licenses/LICENSE-2.0
    
    除非因适用法律需要或书面同意,
    根据许可证分发的软件是基于”按原样”基础提供,
    无任何明示的或暗示的保证或条件。
    详见根据许可证许可下,特定语言的管辖权限和限制。
  • 原文:http://blog.myspace.cn/1304477870/Archive/2008/03/08/400490912.aspx