About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Nov

    14

    所有继承自 UIComponent 类的所有组件都有 toolTip 对象与 toolTipShown 事件,在 toolTipShown 事件中可以实现 ToolTip 实例跟随鼠标移动的方法。

    <mx:toolTipShown>
     <![CDATA[
      function toolTipShownFun(e:ToolTipEvent):void{
       var pos:Point = new Point(mouseX,mouseY);
       pos.x = e.target.contentToLocal(pos).x + 8;//数值8为离鼠标X距离
       pos.y = e.target.contentToLocal(pos).y + 16;//数值16为离鼠标Y距离
       (e.toolTip as ToolTip).x = pos.x;
       (e.toolTip as ToolTip).y = pos.y;
       (e.toolTip as ToolTip).startDrag();
      }
      toolTipShownFun(event);
     ]]>
    </mx:toolTipShown>

    More...

    Nov

    9

    表找了,没错,AS3里没有这三个事件。但可以基于 MouseEvent 事件以及它的 buttonDown 属性来模拟这三个自定义事件: 

    var button:Sprite = new Sprite();
    button.graphics.beginFill(0x000000, 1);
    button.graphics.drawRect(50,50,200,100);
    addChild(button);
    button.buttonMode = true;
    button.addEventListener(MouseEvent.MOUSE_DOWN, buttonPress);
    button.addEventListener(MouseEvent.MOUSE_UP, buttonRelease);
    button.addEventListener(MouseEvent.MOUSE_OVER, buttonOver);
    button.addEventListener(MouseEvent.MOUSE_OUT, buttonOut);
    function buttonPress(e:MouseEvent):void {
     trace('onPress');
     button.parent.stage.addEventListener(MouseEvent.MOUSE_UP, buttonRelease);
    }
    function buttonRelease(e:MouseEvent):void {
     button.parent.stage.removeEventListener(MouseEvent.MOUSE_UP, buttonRelease);
     if (e.currentTarget != button) {
      trace('onReleasedOutside');
     } else {
      trace('onRelease');
     }
    }
    function buttonOver(e:MouseEvent):void {
     if (e.buttonDown) {
      trace('onDragOver');
     } else {
      trace('onRollOver');
     }
    }
    function buttonOut(e:MouseEvent):void {
     if (e.buttonDown) {
      trace('onDragOut');
     } else {
      trace('onRollOut');
     }
    }

    原文出处:http://www.scottgmorgan.com/blog/index.php/2007/12/20/ondragover-ondragout-and-onreleaseoutside-in-as3/

    Nov

    8

    Canvas 组件不能将 BitmapData 实例作为 backgroundImage 样式属性值,是因为在AS3中,setStyle() 和 getStyle() 方法都是基于CSS的,而CSS中只能使用URL、URI、数字、字符串、字体等值,无法使用字节数据值。而BitmapData是一种字节数据值类型,所以无法使用。

    但 Canvas 继续自 Sprite类,所以每个Canvas 实例与 Sprite 的实例一样都带有 graphics 属性实例作,graphics 属性实例因为可以使用 beginBitmapFill() 方法,所以可以将 BitmapData 间接的填充到Canvas 的 backgroundImage 样式属性中。在 beginBitmapFill() 方法中,可以使用一个Matrix类的实例矩阵变形来模似 Canvas 组件中的 backgroundSize 样式属性。

    以下为一个样例代码: 

    var canvas:Canvas=new Canvas();
    canvas.width=500;
    canvas.height=500;
    var matrix:Matrix = new Matrix();
    matrix.scale(canvas.width/bitmapData.width,canvas.height/bitmapData.height);
    canvas.graphics.clear();
    canvas.graphics.beginBitmapFill(bitmapData,matrix,true,true);
    canvas.graphics.drawRect(0,0,canvas.width,canvas.height);
    canvas.graphics.endFill();

    Nov

    1

    闪吧的涂鸦程序在闪客中是一个非常有代表性的作品。压缩包中的涂鸦程序是本人早先收集的一个源程序,里面包含了闪吧涂鸦程序的算法精华;猫爪程序是本人早先见于猫扑网,是一种最为简单的涂鸦程序。现在也常见于百度各种贴吧内,比如《海贼王吧》的涂鸦程序,都是类似效果(带撤消功能)。

    源码下载:猫爪&涂鸦.rar

    Oct

    31

    ActionScript3 支持了E4X标准来处理XML数据,非常方便;但在ActionScript2 中只能使用DOM标准来处理XML数据(事实上ActionScript3 支持两种标准来处理XML数据,除了E4X之外,仍然支持传统的DOM标准来处理XML数据)。以下为XML数据解析方法的实例截图:

    Oct

    29

    取得外部被加载的SWF对象的类引用方法, 取得类引用后就可以通过 new 来实例化生成多个对象了:

    var contentMc:MovieClip = e.target.content as MovieClip;
    var moduleClassName:String = getQualifiedClassName(contentMc);
    var appDomain:ApplicationDomain = contentMc.loaderInfo.applicationDomain;
    var ModuleClass:Class = appDomain.getDefinition(moduleClassName) as Class;

    一个更简单的方法是利用 constructor 属性来取得文档类的引用:

    var contentMc:MovieClip = e.target.content as MovieClip;
    var ModuleClass:Class = contentMc.constructor as Class;

    More...

    Oct

    26

    Flex Builder 3.x 升级 SDK 方法

    • 0 Comments
    • Flash Platform
    1、

    进入 http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3sdk 页面;

    2、

    下载 Adobe Flex 3.x SDK,并解压至Flex Builder安装路径(如默认位置为 X:\Program Files\Adobe\Flex Builder 3\sdks\3.x);

    3、

    下载 Adobe Flex 3.x Data Visualization Components for Flex Builder,并全部解压至第2步相同目录;

    4、

    下载 Adobe Flex 3.x Automation Libraries for Flex Builder,并全部解压至第2步目录中的 frameworks 目录;

    5、

    启动 Flex Builder, 点菜下拉菜单 Window / Preferences 打开属性对话框,打开 Flex 选项卡,选中 Installed Flex SDKs 子选项卡,单击Add按扭,添加SDK路径与名称;

    6、

    将新装 SDK 设为默认值,完成。

    More...

    Oct

    21

    AdvancedDataGrid 组件虽然与 Tree 组件一样能支持树型结构的数据,但 AdvancedDataGrid 组件并没有像 Tree 组件那样拥有 openItems 属性,所以在判断 AdvancedDataGrid 组件所有层级数据是否全部被打开或全部被关闭需要通过其它类来实现。一般 AdvancedDataGrid 的source属性在使用树型数据结构时可通过 HierarchicalData 类的包装解析。此时 AdvancedDataGrid  类的属性 dataProvider 为实现了 IHierarchicalCollectionView 接口类的数据类型。IHierarchicalCollectionView 拥有 openNodes 属性,此时可以用来判断 AdvancedDataGrid 组件树型数据判断是否所有节点被打开方法。样例代码如:

    //myADG 为 AdvancedDataGrid 的一个实例
    //myOpenNodes 为 myADG 打开的节点数
    //执行该函数后,如 myOpenNodes 为 0,表所所有点节被关闭,否则有节点被打开
    //如需枚举所有被打开的节点,使用for each … in 遍历 obj 对象
    function getOpenNodes():void {
     myOpenNodes = 0;
     if(myADG.dataProvider is IHierarchicalCollectionView){
         var obj:Object = IHierarchicalCollectionView(myADG.dataProvider).openNodes;
      for ( var i:* in obj){
       myOpenNodes++;
      }
     }
    }

    Oct

    21

    FLEX 没有了 FLASH 的 getIsBranch() 方法,可以通过以下方法判断一个树型结构数据是否为叶子节点:

    length= XML(mx.controls.Tree(event.target).selectedItem).children().length();

    如果 length为0 ,说明是叶子节点,否则就不是。

    Oct

    19

    SharedObject  的 data 属性默认只能保存原始对象,如字符串、数组、数字、布尔值、二进制对象、XML,等等。如果要保存 ArrayCollection 或自定义对象就需要利用一些其它类的实现。由于原始对象数组本身可以包含任何数据类型,所以当数组中也包含了 ArrayCollection  或自定义对象时,也需要利用其它一些类的实现。

    一个普通的包含原始对象字符串或数字等数据的 ArrayCollection  直接通过 ByteArray 的 writeObject方法先转换成二进制再保存。

    var bytes : ByteArray = new ByteArray(); 
    bytes.writeObject(arrayCollection); 
    var sharedObject : SharedObject = SharedObject('myAC'); 
    sharedObject.data.ac  = bytes;

    当取需要回该 ArrayCollection  对象时:

    var ac : ArrayCollection = (SharedObject('myAC').data.ac as 
    ByteArray).readObject() as ArrayCollection;

    如果数组或集合中包含了自定义对象,那么在将它们转换成二进制序列化对象之前,还需要先使用 registerClassAlias() 方法对类进行别名注册。