将MovieClip和Buttons的状态保存到File。

时间:2014-02-13 12:43:33

标签: actionscript-3 file flash save

有没有办法在Flash中保存当前在舞台上的对象?

例如,如果用户从作为界面一部分的面板拖动特定MovieClip并将其放置在舞台上的某个位置,然后点击TextField添加Button

有没有办法将位置,属性和各种其他内容保存到外部文件中?

这样,如果用户点击“加载”按钮,它会在下次运行程序时将MovieClip和文本加载到空白阶段,并且它们位于完全相同的位置?

2 个答案:

答案 0 :(得分:0)

是的,您可以将此信息保存在XML文件中。例如。

XML样本可能是这样的,

WorkSpace.xml

<stageObjects>
    <object libName="myTextField" type="TextField" xPos="20" yPos"10" txt="SomeText" />
    <object libName="myMovieClip" type="MovieClip" xPos="20" yPos"10" />
</stageObjects>

在您的应用加载时,请阅读此XML文件并采取必要的操作。

答案 1 :(得分:0)

如果我有任何类型的本地客户端级游戏,并且我使用闪存来保存本地值以达到cookie的目的;我会利用SharedObject Class。它不是传统的mime类型,它还具有.sfo扩展名,它们通常存储在随机目录中。因此,只有当用户刷新其“常规”浏览数据时才会清除它们。没有过于复杂,这个演示将允许您保存数据,关闭SWF文件,重新打开它并找到最后的设置。

package {

import flash.display...
import flash.events...
import flash.events.NetStatusEvent;
import flash.net.SharedObject;
import flash.net.SharedObjectFlushStatus;
import flash.text.TextField;
import flash.text...

public class SharedObjectClass {

   private var _so:SharedObject; 
   private var _in:TextField = new TextField(); 
   public function SharedObjectClass() { 
       _so = SharedObject.getLocal("application-name");
       addChild(_in.text = String(_so.data.savedValue));
   }
   private function saveValue(event:*=null):void {
       _so.data.savedValue = _in.text;
       var flushStatus:String = null;
       try {
           flushStatus = _so.flush(10000);
       } catch (error:Error) 
           //..nothing?
       }
       if(flushStatus != null) {
           if(flushStatus == SharedObjectFlushStatus.PENDING) {
               _so.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
           }
       }
   }

   private function clearValue(event:*=null):void {
       delete _so.data.savedValue;
   }

   private function onFlushStatus(event:NetStatusEvent):void {
        switch (event.info.code) {
           case "SharedObject.Flush.Success":
           break;
           case "SharedObject.Flush.Failed":
           break;
       }

       _so.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
   }

private var _so:SharedObject; private var _in:TextField = new TextField(); public function SharedObjectClass() { _so = SharedObject.getLocal("application-name"); addChild(_in.text = String(_so.data.savedValue)); } private function saveValue(event:*=null):void { _so.data.savedValue = _in.text; var flushStatus:String = null; try { flushStatus = _so.flush(10000); } catch (error:Error) //..nothing? }

if(flushStatus != null) { if(flushStatus == SharedObjectFlushStatus.PENDING) { _so.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus); } } } private function clearValue(event:*=null):void { delete _so.data.savedValue; } private function onFlushStatus(event:NetStatusEvent):void { switch (event.info.code) { case "SharedObject.Flush.Success": break; case "SharedObject.Flush.Failed": break; } _so.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus); } 将始终是您对此对象的引用,重命名它将创建一个新实例。我把这些文件拆开了,它们是写得很好的XML文件,适用于AMF For Servers。在此示例中,将详细描述“保存”,“清除”和“刷新方法”。