AS3 ShareObject类示例研究

package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    //NetConnection、NetStream 或 SharedObject 对象报告其状态时,Flash® Player 将调度 NetStatusEvent 对象。 只有一种类型的状态事件:NetStatusEvent.NET_STATUS
    import flash.events.NetStatusEvent;
    import flash.net.SharedObject;
    //SharedObjectFlushStatus 类为通过调用 SharedObject.flush() 方法而返回的代码提供了值。
    import flash.net.SharedObjectFlushStatus;
    import flash.text.TextField;
    //TextFieldAutoSize 类是在设置 TextField 类的 autoSize 属性时使用的常数值的枚举。
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFieldType;
   
    public class SharedObjectExample extends Sprite {
       
        private var mySo:SharedObject;
       
        public function SharedObjectExample() {
            buildUI();
            saveBtn.addEventListener(MouseEvent.CLICK, saveValue);
            clearBtn.addEventListener(MouseEvent.CLICK, clearValue);
            //返回对本地永久共享对象的引用,该对象只可用于当前客户端。 如果尚不存在共享对象,则此方法将创建一个共享对象。 如果传递给 getLocal() 的任何值均无效,或如果调用失败,Flash Player 将引发异常。
            mySo = SharedObject.getLocal("application-name");
            output.appendText("SharedObject loaded...\n");
            //赋给对象的 data 属性 (property) 的属性 (attribute) 集合;可以共享和存储这些属性 (attribute)。 每个特性都可以是任何 ActionScript 或 JavaScript 类型的对象(数组、数字、布尔值、字节数组、XML,等等)。
            output.appendText("loaded value: " + mySo.data.savedValue + "\n\n");
        }

         private function saveValue(event:MouseEvent):void {
            output.appendText("saving value...\n");
            mySo.data.savedValue = input.text;
           
            var flushStatus:String = null;
            try {
                //将本地永久共享对象立即写入本地文件。 如果不使用此方法,则 Flash Player 会在共享对象会话结束时(也就是说,在 SWF 文件关闭时,在由于不再有对共享对象的任何引用而将其作为垃圾回收时,或者在调用 SharedObject.clear()SharedObject.close() 时),将共享对象写入文件。
               //参数:minDiskSpace: (default = 0) — 必须分配给此对象的最小磁盘空间(以字节为单位)。
                flushStatus = mySo.flush(10000);
            } catch (error:Error) {
                output.appendText("Error...Could not write SharedObject to disk\n");
            }
            if (flushStatus != null) {
                switch (flushStatus) {
                    //指示在可以刷新之前,提示用户增加共享对象的磁盘空间。
                    case SharedObjectFlushStatus.PENDING:
                        output.appendText("Requesting permission to save object...\n");
                        mySo.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
                        break;
                    //指示成功完成了刷新。
                    case SharedObjectFlushStatus.FLUSHED:
                        output.appendText("Value flushed to disk.\n");
                        break;
                }
            }
            output.appendText("\n");
        }
       
        private function clearValue(event:MouseEvent):void {
            output.appendText("Cleared saved value...Reload SWF and the value should be \"undefined\".\n\n");            
            delete mySo.data.savedValue;
        }
       
        private function onFlushStatus(event:NetStatusEvent):void {
            output.appendText("User closed permission dialog...\n");
            //info:一个对象,具有描述对象的状态或错误情况的属性
            switch (event.info.code) {
                case "SharedObject.Flush.Success":
                    output.appendText("User granted permission -- value saved.\n");
                    break;
                case "SharedObject.Flush.Failed":
                    output.appendText("User denied permission -- value not saved.\n");
                    break;
            }
            output.appendText("\n");

            mySo.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
        }
       
        // UI elements
        private var inputLbl:TextField;
        private var input:TextField;
        private var output:TextField;
        private var saveBtn:Sprite;
        private var clearBtn:Sprite;
   
        private function buildUI():void {
            // input label
            inputLbl = new TextField();
            addChild(inputLbl);
            inputLbl.x = 10;
            inputLbl.y = 10;
            inputLbl.text = "Value to save:";
           
            // input TextField
            input = new TextField();
            addChild(input);
            input.x = 80;
            input.y = 10;
            input.width = 100;
            input.height = 20;
            input.border = true;
            input.background = true;
            input.type = TextFieldType.INPUT;
           
            // output TextField
            output = new TextField();
            addChild(output);
            output.x = 10;
            output.y = 35;
            output.width = 250;
            output.height = 250;
            output.multiline = true;
            output.wordWrap = true;
            output.border = true;
            output.background = true;
           
            // Save button
            saveBtn = new Sprite();
            addChild(saveBtn);
            saveBtn.x = 190;
            saveBtn.y = 10;
            saveBtn.useHandCursor = true;
            saveBtn.graphics.lineStyle(1);
            saveBtn.graphics.beginFill(0xcccccc);
            saveBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
            var saveLbl:TextField = new TextField();
            saveBtn.addChild(saveLbl);
            saveLbl.text = "Save";
            saveLbl.selectable = false;
           
            // Clear button
            clearBtn = new Sprite();
            addChild(clearBtn);
            clearBtn.x = 230;
            clearBtn.y = 10;
            clearBtn.useHandCursor = true;
            clearBtn.graphics.lineStyle(1);
            clearBtn.graphics.beginFill(0xcccccc);
            clearBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
            var clearLbl:TextField = new TextField();
            clearBtn.addChild(clearLbl);
            clearLbl.text = "Clear";
            clearLbl.selectable = false;
        }
    }
}

posted on 2011-12-08 09:24  jinglikeblue  阅读(574)  评论(0)    收藏  举报

导航