Actionscript 3 如何在AS3中将功能从类文件链接到DocumentClass和Movieclips?
我遇到了问题,从时间线代码切换到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),我是否执行以下操作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(嵌套动画?) 我已
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);
}
}
}