Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何在AS3中将功能从类文件链接到DocumentClass和Movieclips?_Actionscript 3_Flash_Actionscript - Fatal编程技术网

Actionscript 3 如何在AS3中将功能从类文件链接到DocumentClass和Movieclips?

Actionscript 3 如何在AS3中将功能从类文件链接到DocumentClass和Movieclips?,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,我遇到了问题,从时间线代码切换到OOP/文档类。我成功地在时间轴上用AS3构建了Fla,没有问题。但在面向对象编程时完全不知道 我被告知场景不好,我应该坚持把我的场景保存为电影片段 我的情况如下: 我有8页的PSD文件,我将每个PSD导入Flash Pro,每个PSD都有几个按钮和文本输入。第一页是登录页,第二页是注册页等 我的问题是: 1.)如何保存PSD?我是否将它们保存为嵌套动画(给PSD上的每个项目一个符号?按钮和文本输入?),然后将PSD保存为1个movieclip(嵌套动画?) 我已

我遇到了问题,从时间线代码切换到OOP/文档类。我成功地在时间轴上用AS3构建了Fla,没有问题。但在面向对象编程时完全不知道

我被告知场景不好,我应该坚持把我的场景保存为电影片段

我的情况如下: 我有8页的PSD文件,我将每个PSD导入Flash Pro,每个PSD都有几个按钮和文本输入。第一页是登录页,第二页是注册页等

我的问题是:

1.)如何保存PSD?我是否将它们保存为嵌套动画(给PSD上的每个项目一个符号?按钮和文本输入?),然后将PSD保存为1个movieclip(嵌套动画?) 我已经尝试将带有Flash层的PSD导入到舞台上,然后给每个按钮和文本输入它们的属性,然后将它们保存为嵌套动画,但是我是否从类文档中调用Movieclip?或者我要链接文档类(Main.as)中的所有Movieclips吗

2.)如何从类文件访问Movieclip,我尝试了var login:login=New login,然后是addChild(login)。这就增加了movieclip,但是没有一个功能可以工作,并且错误地说访问每个按钮名称的未定义属性

3.)如果单击了1个按钮并链接到另一个页面(PSD),我是否执行以下操作

h.addEventListener(MouseEvent.CLICK, fl_ClickToGohome);

 function fl_ClickToGohome(event:MouseEvent):void
{
    gotoAndStop("register.as");

感谢您抽出时间

中编程。因为
文件与时间线没有太大区别。如果您使用的是document类(位于Actionscript设置面板中),您可能会觉得类特定编程中的突然变化有点让人望而生畏。为了实现更平稳的过渡,您可以简单地将当前时间线代码转储到新的
代码中。按原样将
文件(原样),然后在时间线中简单地删除以下行:

include "code.as";
这实际上只是复制/粘贴代码并运行它,除非现在您可以使用适当的代码编辑器(例如)。此外,由于它不是一个新类,因此您在那里编写的代码与您的时间线具有相同的范围

2) 。函数只能访问其在中创建的命名空间(这可能就是文档类抛出“访问未定义属性”错误的原因)。始终可以通过传递对对象的引用(并通过扩展传递其名称空间)

1) 。为了回答你的第一个问题,你可以制作你的电影唇,并按照你想要的任何顺序,尽可能深地嵌套它们。重要的是要知道如何导航到该对象。以以下阶段为例:

root:MainTimeline ¬
    0: PSD_one:MovieClip ¬
        0: backgroundImage:Bitmap
        1: button:Sprite
        2: txt:TextField
    1: PSD_two:MovieClip
    2: PSD_three:MovieClip
时间线有3个对象,每个对象都有一个从零开始的索引。第一个PSD是一个具有3个子元素的MovieClip,每个子元素都具有名称属性,我们可以使用这些属性来寻址对象。在FlashIDE中,我们将这些标记为“实例”,由于IDE在标记为“自动声明阶段实例”的Actionscript设置面板中启用了内部魔法,它们自动成为父对象上的属性

这意味着,要更改
txt
上的文本,我们可以编写
PSD\u one.txt.text=“foo”
。如果没有此设置,则需要使用容器方法,如
。直接调用
txt.text=“foo”
将永远不起作用,因为当前范围中没有被调用的属性(即,
this.txt

3) 。是控制时间轴帧的MovieClip方法。如果你真的想彻底摆脱旧有的做事方式,你应该停止使用相框

有两种方法可以显示这些PSD

方法1: 您可以在舞台上使用flashide来实例化您的psd,并为每个psd指定一个唯一的名称,然后在代码中引用。假设上面的布局,您可以简单地将每个PSD移出屏幕(例如使用
PSD_two.x=this.loaderInfo.width
),并在希望“转到”下一个“帧”时将它们交换到屏幕中央

方法2: 您已经按照习惯将PSD导入到库中,但不要实例化它们。相反,您直接跳入代码,当有人单击按钮
h
转到
fl\u clicktohome
,您的函数将拾取库对象并手动对其进行实例化,并将其设置为后台的父对象

如果您要开始动态加载资产,这种方法将更可取。当然,您不需要在库中创建一个
PSD\u one
类,而只需使用或,您需要保存压缩图像,而不是完整的PSD

我希望这有帮助。我知道我没有直接回答您的问题,但有时问题源于实现方式,而不是具体的代码

-干杯


要回答你的问题。。。 1:指向对象的路径

如果不确定对象的路径,请尝试此函数。这是我在自己的作品中使用的精简版本

function listLayers(obj = null, indent:String = ""):void {
    // If no object was provided, start with the MainTimeline
    if (obj == null) { obj = root; }

    for (var i:int = 0; i < obj.numChildren; i++) {
        // Make a pointer to the object at this index
        var item = obj.getChildAt(i);

        // Get the item type
        var type:String = flash.utils.getQualifiedClassName(item);
        if (type.lastIndexOf("::") != -1) {type = type.split("::")[1];}

        var msg:String = indent + i + ": " + item.name + ":" + type;
        if (type != "TLFTextField" && item.hasOwnProperty("numChildren") && item.numChildren > 0) {
            trace(msg + " ¬");
            listLayers(item, indent + "  ");
        } else {
            trace(msg);
        }
    }   
}
函数列表层(obj=null,缩进:String=”“):void{
//如果未提供对象,请从主时间线开始
如果(obj==null){obj=root;}
for(变量i:int=0;i0){
微量(味精+“,”);
列表层(项目,缩进+“”);
}否则{
微量(味精);
}
}   
}
这将以与上面看到的格式(使用PSD)打印舞台的结构。然后可以使用function listLayers(obj = null, indent:String = ""):void { // If no object was provided, start with the MainTimeline if (obj == null) { obj = root; } for (var i:int = 0; i < obj.numChildren; i++) { // Make a pointer to the object at this index var item = obj.getChildAt(i); // Get the item type var type:String = flash.utils.getQualifiedClassName(item); if (type.lastIndexOf("::") != -1) {type = type.split("::")[1];} var msg:String = indent + i + ": " + item.name + ":" + type; if (type != "TLFTextField" && item.hasOwnProperty("numChildren") && item.numChildren > 0) { trace(msg + " ¬"); listLayers(item, indent + " "); } else { trace(msg); } } }