有没有办法在Flash中保存当前在舞台上的对象?
例如,如果用户从作为界面一部分的面板拖动特定MovieClip
并将其放置在舞台上的某个位置,然后点击TextField
添加Button
有没有办法将位置,属性和各种其他内容保存到外部文件中?
这样,如果用户点击“加载”按钮,它会在下次运行程序时将MovieClip
和文本加载到空白阶段,并且它们位于完全相同的位置?
答案 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。在此示例中,将详细描述“保存”,“清除”和“刷新方法”。