【问题标题】:Flash AS3: saving/loading the positions of all the children of a MovieClipFlash AS3:保存/加载 MovieClip 的所有子项的位置
【发布时间】:2016-03-10 10:59:33
【问题描述】:

我想知道如何保存和加载 MovieClip 的所有子项的 X 和 Y 位置。

我有一个带有保存和加载按钮的项目。

他们保存并加载 MovieClip 子项的 X 和 Y 位置。

save.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler3);

function fl_MouseClickHandler3(event:MouseEvent):void
{

var mySo:SharedObject = SharedObject.getLocal("SaveData");

mySo.data.my_x = mc2.x;
mySo.data.my_y = mc2.y;
mySo.flush();


}

loader.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_2);

function fl_MouseClickHandler_2(event:MouseEvent):void
{

var mySo:SharedObject = SharedObject.getLocal("SaveData");


mc2.x = mySo.data.my_x;
mc2.y = mySo.data.my_y;

}

不过,这只会保存和加载最后一次单击的 MovieClip 子项。 如何从仅保存和加载最后单击的 MovieClip 子项中更改它, 保存和加载所有的 MovieClip 子项?

【问题讨论】:

  • 那个人几周前问了同样的问题,得到了同样的答案。完全重复。他需要问多少次同样的问题并得到同样的答案?
  • 上周我问了一个类似的问题,但我无法使用收到的答案。不过这次我的问题得到了解答,所以您不必担心我会再次问同样的问题。
  • 这是完全相同的答案,第二个唯一的区别是所有代码都是为您编写的。你第二次问同样的问题不是因为你第一次没有得到正确的答案,而是因为你需要一个可以复制和粘贴的答案。您将答案的正确性基于复制和粘贴的完美程度。
  • 此站点用于获取有关编程问题的帮助。如果有人会一步一步地解释,这样我就可以自己学习答案,那就再好不过了。但是我搜索了几个小时的解决方案/教程,但没有发现任何问题。这帮助我解决了我的问题,那么问题是什么?

标签: actionscript-3 flash


【解决方案1】:

这将始终保存“mc2”位置,您需要对影片剪辑的 numchildren 运行循环并将它们的位置放入数组中,然后以相同的方式访问它们。这是一个代码示例

import flash.display.MovieClip;

var mySo:SharedObject = SharedObject.getLocal("SaveData");
save.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler3);
loader.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_2);

function fl_MouseClickHandler3(event:MouseEvent):void
{
    var clippositions:Array = new Array();
    var child:MovieClip;
    for(var i:uint=0; i<this.numChildren; i++)
    {
        if( this.getChildAt(i) is MovieClip )
        {
            child = this.getChildAt(i) as MovieClip;
            if(child)
            {
                clippositions.push( { clipname:child.name, my_x:child.x,my_y:child.y } );
            }
        }
    }
    mySo.data.clippositions = clippositions
    mySo.flush();
}

function fl_MouseClickHandler_2(event:MouseEvent):void
{
    var clippositions:Array = mySo.data.clippositions;
    if( clippositions != null )
    {
        var child:MovieClip;
        for(var i:uint=0; i<clippositions.length; i++)
        {
            if( this.getChildByName( clippositions[i].clipname ) is MovieClip )
            {
                child = this.getChildByName( clippositions[i].clipname ) as MovieClip;
                if(child)
                {
                    child.x = clippositions[i].my_x;
                    child.y = clippositions[i].my_y;
                }
            }
        }
   }
}

【讨论】:

  • 谢谢,但我收到错误消息:访问未定义的属性 numchildren。
  • 纠正了错误,但现在当我单击保存按钮时,我得到:TypeError: Error #1009: Cannot access a property or method of a null object reference。
  • 我编辑了答案,但您需要根据您的设置对其进行一些调整。该代码假定所有子项都是影片剪辑。
  • 我以为所有的孩子都是电影剪辑?我试图将代码移动到与我的其他代码相关的其他位置,现在我没有收到任何错误,但保存和加载按钮不起作用。
  • 不确定你是如何设置的,我测试了上面的代码,它工作正常,我添加了检查只保存影片剪辑。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2016-06-18
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多