如何将 Class 文件的功能链接到 DocumentClass 和 AS3 中的 Movieclips?

2024-03-18

我在从时间轴代码切换到 OOP/文档类时遇到问题。我成功地用 AS3 按时构建了 Fla,没有任何问题。但在面向对象编程时完全无能为力。

有人告诉我场景不好,我应该坚持将场景保存为影片剪辑。

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

我的问题是:

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

2.)如何从类文件访问Movieclip,我尝试了var login:Login = New Login,然后addChild(login)。这会添加影片剪辑,但所有功能都不起作用,并且错误提示每个按钮的名称都访问未定义的属性。

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

h.addEventListener(MouseEvent.CLICK, fl_ClickToGohome);

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

谢谢你的时间


编程于.as除了时间线之外的文件并没有太大不同。如果您正在使用文档类(在 Actionscript 设置面板中找到),您可能会觉得类特定编程的突然变化有点令人畏惧。为了更平滑的过渡,您可以简单地将当前的时间线代码转储到新的时间线中code.as文件(按原样),然后只需将以下行放入时间线中即可:

include "code.as";

这实际上只是复制/粘贴代码并运行它,除了现在您可以使用适当的代码编辑器(例如崇高的文字 http://www.sublimetext.com/)。此外,由于它不是一个新类,因此您在那里编写的代码与您的时间线具有相同的范围。

2).函数只能访问其创建的名称空间(这可能就是您的文档类抛出“访问未定义属性”错误的原因)。您始终可以通过以下方式传递对对象(以及扩展其名称空间)的引用函数参数 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/statements.html#function.

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 是 MovieClip显示对象容器 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html有 3 个子元素,每个子元素都有 name 属性,我们可以使用它们来寻址对象。在 Flash IDE 中,我们标记这些“实例”,并且由于 IDE 在标有“自动声明阶段实例”的 Actionscript 设置面板中启用的内部魔法,它们会自动成为父对象的属性。

这意味着,要更改文本txt,我们可以写PSD_one.txt.text = "foo"。如果没有此设置,您将需要使用容器方法,例如root http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#root.getChildByName("PSD_one") http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#getChildByName%28%29.getChildAt(2) http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#getChildAt%28%29。直接跟注txt.text = "foo"永远不会工作,因为当前范围内没有称为该属性的属性(即,this.txt是隐含的)。

3). gotoAndStop http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html#gotoAndStop%28%29是一个控制时间线帧的 MovieClip 方法。如果你真的想彻底摆脱旧的做事方式,你应该放弃使用框架。

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

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

方法二:您已按照习惯将 PSD 导入到库中,但不实例化它们。相反,您直接跳到代码中,当有人单击按钮时h要去fl_ClickToGohome,您的函数选择库对象并手动实例化它,并将其父级设置为舞台添加子对象() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#addChild%28%29.

function fl_ClickToGohome(e:MouseEvent):void {
    var psd:PSD_one = new PSD_one();
    addChild(psd);
}

如果您要开始动态加载资源,这种方法会更可取。当然,而不是已经创建了PSD_one类在你的库中,你只需使用网址加载器() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html or Loader() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html,并且您需要保存压缩图像,而不是完整的 PSD。

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

-Cheers


为了回答你的问题...

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);
        }
    }   
}

这将以与您在上面看到的格式大致相同的格式(使用 PSD)打印出舞台的结构。然后你可以使用getChildByName从根目录到子目录(必须提供完整路径,就像导航硬盘上的文件夹一样)。

2:公共/私有命名空间

这些只能在专门的课程中使用。如果您正在使用include我提到的方法,您可以像在时间线代码中一样省略这些。它们表示属性/方法是否可以从类的“外部”访问。如果您刚刚开始,请将所有内容保留为公开。当您准备好解决它时,您可以稍后再担心内存优化。

3:类如何访问按钮?

将 DisplayList 视为文件夹结构的最简单方法。

你可能会写

C:/Users/Me

DisplayList 中的哪个看起来更像

C.Users.Me

当然,我们没有名为的根位置C,你的对象可能被称为PSD_one and myButton,所以我们可以将其重写如下......

root.PSD_one.myButton

这是假设您实际上在对象上预定义了这些属性,而动态创建对象时不会发生这种情况。在这些情况下,您可以将命令串在一起,如下所示:

root.getChildByName("PSD_one").getChildByName("myButton")

当您编写一个类时,就像在网络上创建一台新计算机一样。该类和您的 MainTimeline 之间没有直接关系。你需要连接它们。

如果您实例化一个 DisplayListObject(例如 Sprite)并将其添加到舞台上,该对象会自动获得一些属性,例如stage, root, and parent事实上,直到它被养育为止null。这些是类可以从自身内部引用以连接到MainTimeline并访问其上的对象。

相反,如果您愿意,可以从构造函数参数将对阶段的引用传递给类,如下所示:

var foo:MySprite = new MySprite(stage);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Class 文件的功能链接到 DocumentClass 和 AS3 中的 Movieclips? 的相关文章

  • HTTPS 上的 SWFUpload 无法正常工作

    当目标 servlet 侦听 HTTPS 时 我在使用 SWFUpload 上传文件时遇到问题 在 HTTP 上它工作得很好 仅当使用 FireFox 或 Opera 时才会出现此问题 在 IE 上它工作正常 没有尝试过其他浏览器 EDIT
  • Chrome 更新阻止 Flash 自动播放 - 如何避免?

    我在 html 页面中嵌入了 YouTube 视频 我将 youtube iframe API 与 Flash 结合使用 在我的例子中 我无法使用 HTML5 视频 自上次 Google Chrome 更新以来 Chrome 会阻止自动播放
  • 在android中加载swf文件时出现问题

    当我在 Android 模拟器中加载交互式 SWF 文件时遇到问题 我使用2 3 1 AVD 这是代码 package com androidpeople view import android app Activity import an
  • 如何在 AS3 中设置 swf 的宽度和高度?

    如何在 AS3 中设置 swf 的宽度和高度 到目前为止 这是我的代码 package import flash display Sprite public class Game extends Sprite 现在 加载时它处于任意默认大小
  • 如何保护swf文件不被反编译?

    我正在使用 Flex 框架从事重要项目 我想对我的算法和代码保密 是否有可能以某种方式保护 swf 文件不被反编译 我不希望有人使用 flash 反编译器提取我的代码 Thanks 这很简单 只需将其保存在您的 PC 上 不要将其放在网络上
  • 如何向 Flash Player 10.1 发出启动 flv 或 swf 的意图?

    我有一堆FLV视频文件存储在媒体服务器 我正在尝试让它们在 Flash 播放器中启动 一直在四处寻找但没有找到太多帮助 我已将 flv 文件下载到临时存储中 并尝试使用intent 这就是我的代码的样子 来自我在网上看到的 try URL
  • 在 Actionscript 3 中实现单例模式类的最佳方法是什么?

    由于 AS3 不允许私有构造函数 因此构造单例并保证构造函数不是通过 new 显式创建的唯一方法是传递单个参数并检查它 我听说过两个建议 一个是检查调用者并确保它是静态 getInstance 另一个是在同一包命名空间中拥有一个私有 内部类
  • AS2 使用 onEnterFrames 处理多个影片剪辑时减少延迟的最佳方法

    正如标题所述 我想知道同时处理舞台上多个影片剪辑的最佳方法是什么 每个影片剪辑都有自己的 onEnterFrame 函数 假设屏幕上同时有 50 个敌人 并且不断播放行走动画 onEnterFrame 函数将包括获取方向 移动 X Y 值
  • 如何在 Flex 3 中使用 htmlText 作为单选按钮标签

    我需要在 Flex 3 中为单选按钮显示一些粗体单词 如下所示 选项 1 你好world 选项2 Hello world 我看到单选按钮的标签没有 htmlText 属性 有人对完成这个要求有什么建议吗 Thanks Anji 蒂莫菲 达维
  • 保护客户端 API 的安全

    我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库 其中必须确保两个非常重要的功能的安全 用户每次游玩都必须扣款 我们必须确保提交的分数是玩家实际获得的分数 解决第一个问题看起来很简单 在每次游戏开始时 我们都会调用
  • ActionScript 3.0 中缺少运算符重载

    我在 ActionScript 中最怀念的事情之一是缺少运算符重载 特别是 我通过在我的类中添加 Compare 方法来解决这个问题 但这在很多情况下没有帮助 比如当你想使用内置字典之类的东西时 有没有好的方法来解决这个问题 Nope 但添
  • 调用控制器 Post 方法时遇到问题

    这是我的方法 AcceptVerbs HttpVerbs Post public void SaveImage FormCollection formValues byte contents Convert FromBase64String
  • 从另一个域加载外部图像

    是否可以从另一个域加载图像 jpg png gif 并操作像素 我想当下载 复制图像时它就在我的域中 使用加载器并将内容添加到图像组件时 我在调试器中收到错误 我想这里有一些跨域策略在起作用 但在继续之前我需要更确定它是如何工作的 我想 如
  • 将应用程序状态保存在磁盘或其他位置,以便用户稍后访问它

    In 弹性构建器 4 5我正在做一个像这样的项目cacoo http www cacoo com 我想保存diagrams display object ui components text 在将应用程序关闭到应用程序之后我无法访问的某个地
  • 求反射角的弧度

    我正在编写一个简单的 Flash 游戏 只是为了学习 Flash 并提高我的数学能力 但我对弧度感到非常困惑 因为这对我来说是新的 到目前为止 我所做的是使用鼠标 单击并释放 使用弧度向该方向射出一个球 现在我想要发生的是 当球撞到墙壁时
  • 流媒体视频文件?

    我需要流式传输 flv 文件 流媒体应该看起来像直播 我应该有一种方法可以更改目标文件 抱歉我的英语不好 如果 流式传输 的意思是 显示 Flash 视频剪辑 则 flv streaming 并不是真正的流式传输 而是正常的文件传输 即使文
  • Adobe Flash 项目的版本控制

    我正在处理一个非常复杂的 Flash 项目 该项目是我们为客户使用而部署的全套服务的一部分 对于我们的大多数软件源 Java PHP Javascript HTML 和一些其他语言的支持脚本 我们使用 subversion 进行版本控制和管
  • Flex 字典字面量

    在 Flex 中工作 我需要用相当复杂的结构填充字典 基于本文档页面 http livedocs adobe com flex 3 html help html content 10 Lists of data 4 html我尝试通过以下语
  • 使用多个模块时优化 Flex

    我有一个 Flex 应用程序 加载时间非常重要 消费者网站 我希望能够在屏幕上显示一些内容 然后允许根据需要加载其他模块 我面临的问题是所有模块的总和比我将所有组件包含在单个 swf 文件中要大得多 原因很明显 例如 访问 Web 服务所需
  • Random.Next() 的 Actionscript 3 实现

    我想知道 AS 3 中是否有很好的 Random Next 实现 基本上想要生成一系列给定种子的随机数 有时 最小和最大限制 类似于 C System Random 类 Random random new Random return ran

随机推荐