0

这是问题......我正在开发一个弹性应用程序(actionscript)......

我的应用程序中有一个面板,它在某些位置包含 2 个按钮和 3 个画布组件……现在我想将面板的当前状态存储在某个文件或数据库中……然后我想再次加载同一个面板当我回来运行应用程序时我的应用程序...

所以我尝试使用它的 readObject() 和 writeObject() 方法将整个面板转换为 ByteArray 对象......但是当我读取 ByteArray 并使用 addChild() 方法在我的应用程序中添加面板时,它没有添加任何东西并且有没有错误或错误...

writeObject 创建我可以打印的 ByteArray 但是当我取回它并添加孩子时,我无法获取面板并且它是孩子......

如果有人可以提供帮助...将不胜感激...在此先感谢...

这是示例代码...解释我想要做什么...

<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.rpc.events.ResultEvent;
        import mx.collections.ArrayCollection;

    [Bindable] private var photoFeed:ArrayCollection;

    var buffer:ByteArray;

    private function init():void{

        addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
        searchTerms.setFocus();
        buffer = new ByteArray();
    }

    private function keyHandler(event:KeyboardEvent):void{
        if(event.charCode == 13){

                    myButton.label = "Exit";

            try{
                buffer.writeObject(myData);

            }catch(error:Error){
                Alert.show(error.toString(),"Encoding Error");
            }

            removeChild(myData);
            reloadButton.visible = true;
            Alert.show("HBox is deleted","Alert");
        }
    }

    private function reloadHBox():void{

        Alert.show("Trying to load Hbox","Alert"); 
        try{
            buffer.position = 0;
            var obj:HBox = buffer.readObject() as HBox;

        }catch(error:Error){
            Alert.show(error.toString(),"Decoding Error");
        }

        addChild(obj);

        Alert.show("Hbox is reloaded","Alert"); 
    }

    ]]>
</mx:Script>

<mx:Button id="reloadButton" label="Reload HBox" visible="false" click="reloadHBox()"/>

<mx:HBox width="100%" id="myData">
    <mx:Label text="Hi Rashmin here..."/>
    <mx:TextInput id="searchTerms" name="searchTerms" text="Hello How are you?"/>
    <mx:Button id="myButton" label="Enter"/>
</mx:HBox>

我想重新生成 HBox,所以需要一些帮助......

4

2 回答 2

1

创意,但我并不惊讶它不起作用。你能分享一些代码吗?

也就是说,我只是编写一个算法来保存状态(x、y 坐标/高度宽度等...)并在加载时重置该信息。

于 2010-08-14T02:59:12.103 回答
0

您可以创建一个对象来存储您的面板位置

 private var positions:Object;
 positions = { panel1Position: new Point( panel1X , panel1Y)
                          //etc.... };

设置一些默认值开始,您的组件将从您的位置对象获取它们的位置。

  private function init():void
  {
     panel1.x = positions.panel1Position.x;
     //etc...
  }

要保存您的值,请使用 SharedObject

 var objectName:String = "Put some identifier here";
 var sharedObject:SharedObject = SharedObject.getLocal( objectName , '/' );
 sharedObject.data.positions = positions;

要检索您的值,您只需要

 var sharedObject = SharedObject.getLocal( "the identifier you've set above" , '/' );
 positions = sharedObject.data.positions;

然后,您可以更新组件的 x 和 y 值。无论如何,这是一般的想法,有关更多信息,请查看 SharedObject 类:

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

您可以对面板状态应用相同的原则,例如,如果您可以用整数标识每个状态,请将状态整数保存在 sharedObject 中。

于 2010-08-14T06:17:22.247 回答