如何将 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? 的相关文章

  • 如何在 Flex 中对 ArrayCollection 进行排序

    我想按 fieldName 升序对 Arraycollection 进行排序 这是我的代码 我想知道它是否正确 你有什么建议吗 public static function arrayCollectionSort ar ArrayColle
  • 在 ActionScript 2 中处理无限/巨大的世界

    在 ActionScript 2 中 如何以最小的延迟实现无限 巨大的程序生成世界 例如 在像 泰拉瑞亚 或 我的世界 这样的游戏中 处理这样一个巨大的世界的最佳方法是什么 显然 循环遍历每个块并以这种方式移动它们是行不通的 我尝试将块放入
  • Chrome 通知/权限栏 - 检测是否可见

    当 Flash 请求访问相机或麦克风时 Chrome 会显示以下通知栏 有没有 JavaScript 或 AS3 方法可以检测它是否可见 我知道你问这个问题已经很长时间了 但我们终于找到了一个我想分享的解决方法 ActionScript C
  • 在浏览器上录制视频并上传到LAMP服务器

    我已经尝试了很多东西 red5 jquery 网络摄像头 html5 但这些解决方案都没有录制视频并准备好上传到服务器 无论如何 html5 flash 等等 更好的跨浏览器解决方案 最好的 上传视频 音频 并将结果上传到服务器 我猜是通过
  • 我如何知道请求是否来自 flash swf?

    我有一个用 flash 开发的应用程序 我需要访问一些 php 文件 因此 如果访问来自 swf 则 php 文件会返回一些数据 如何判断请求是否来自Flash 无需将 get post 变量传递给 php 可能是用户代理 推荐人 请记住
  • 有没有其他方法可以在delphi上观看youtube视频?

    我看到http www delphiflash com demo youtube video http www delphiflash com demo youtube video关于如何在 delphi 上加载 flash 视频 但它不是
  • 当一个 SWF 动态加载另一个 SWF 文件时,如何使两个 SWF 文件中使用的 Action Script 3 类解析为同一个类?

    背景 我正在纯 Action Script 3 中开发一个高度模块化的应用程序 我们使用 Flex 4 SDK 来自动化构建 但我们所有的代码必须能够直接在 Flash CS4 Professional 中编译 我们有一个 framewor
  • 用于商业 Web 应用程序的 Flash - 为什么不呢?

    我从事开发商业网络应用程序的行业 它们大多供内部使用 有时有合作伙伴区域 但很少可供公共互联网使用 它们是帮助公司运营业务的应用程序 一段时间以来 我有一个想法困扰着我 为什么不使用 Flash 到现在为止都是ASP NET AJAX 这还
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • as3 - 如何停止视频并分离 NetStream

    我有来自服务器的视频流 稍后我想并排添加另一个视频 那就好 我做到了 现在当我想删除视频时我的问题来了 我设法将其从显示中删除 但我可以听到视频仍在后台播放 那么我怎样才能停止播放该视频呢 这是我设置视频的代码 ns new NetStre
  • 位图太大 as3

    在AS3中 我从zip文件加载png nochump的zip库通过ByteArray到Loader png 的宽度最大可达 45k 像素 但高度仅为 120 像素 这在 Flash 中产生了一个问题 因为图像的宽度只能约为 8000 像素
  • 在 Actionscript-3 中优化 2D Flash 游戏的动态背景引擎

    编辑2 根据缺乏回复来判断 我开始怀疑我的问题是否足够清楚 请告诉我是否需要详细说明 注意 请参阅底部以获取代码更新 简短介绍 我正在用 ActionScript 编写一个二维 Flash 空间游戏 宇宙无限大 由于这个特性 背景必须动态渲
  • 错误 1046:未找到类型或不是编译时常量

    我正在尝试在 CS6 中为我正在上的课程制作一个交互式 Flash 视频 我和教授简单地谈了一下这个问题 他也无法弄清楚这个问题 奇怪的是 它说错误在第 2 行和第 3 行 当我删除这些行上的代码时 它still说错误就在这些行上 看看我的
  • AS3 逗号帮助

    我有这个代码 我想在我的数字中使用逗号 累积奖金为 169 85 但显示为16985 00在游戏里 如何解决这个问题 public function jackpotstring String var myPattern RegExp var
  • Flex 4:状态改变事件

    Flex 4 中是否有任何事件可以用来检测状态更改 我知道这个问题已经很老了 但是通过谷歌搜索状态更改事件 我仍然到达这里 所以对于想知道的人 有一个StateChangeEvent CURRENT STATE CHANGE由组件调度的事件
  • AS3 禁用数据网格内文本输入的可编辑/可选择

    我目前正在尝试禁用可选择 可编辑 或将 textInput 更改为动态以获得我想要的结果 我有一个带有下拉菜单和文本输入区域的自定义数据网格 但是 如果我的 型号 列中没有数据 我不想允许在相应的 购买价格 单元格中输入任何内容 col1
  • 如何在 ItemRenderer 内使用数据网格范围外的变量?

    我使用将项目数组绑定到数据网格ItemRenderer 我用data变量来控制可绑定数据 我也有someComponentVariable需要插入到每一行中 但它是在组件范围内声明的 因此数据网格似乎无法重新识别它 编译错误 我如何使用这个
  • 如何在 Flex/Actionscript 中动态填充进度条?

    我想创建一个进度条 其中的 根据某些变量用不同的颜色填充 例如 33 会用不同的颜色填充进度条的 33 然后 40 会同样填充进度条的 40 在 Actionscript 和 Flex 3 中执行此操作的最佳方法是什么 我过去这样做的方法是
  • DatagramSocket bind() 和 connect() 区别?

    我读了文档 http help adobe com en US FlashPlatform reference actionscript 3 flash net DatagramSocket html 但尚不清楚两者之间有什么区别bind
  • AS3如何在角色死亡动画结束时转到MainTimeline中的下一帧

    所以我需要知道我的角色 鸟 是否用管道 hitTestObject 在动画结束后播放骰子动画 它需要在主时间轴中转到游戏结束帧 if bird hitTestObject pipe1 bird gotoAndStop 3 frame 3 w

随机推荐