如何避免 AS3 代码混乱

2024-03-14

我使用 ActionScript 3 进行编程已经有一段时间了,我注意到我的代码的自然进展似乎采用一个巨大的文档类的形式,其中包含数十个成员变量、回调和舞台上对象的句柄。简而言之:有点乱!

问题是,我真的没有找到解决办法(至少目前还没有)。我在时间轴上使用不同的关键帧来表示应用程序中的不同状态,虽然我在时间轴上有一些代码(用于快速操作,例如在影片剪辑上单击鼠标),但大多数逻辑最终都被转储到主程序中文档类。

所以,我想知道......有哪些好方法可以帮助整理这段疯狂的代码?或者这是正常的?我有 C++ 背景,喜欢编写面向对象的东西,但我找不到将这种结构移植到 Flash 的方法。任何见解将非常感激。

Thanks


您可以将许多 C++ 技能应用到 AS3 项目中。

有很多技巧。很高兴您提出将代码放在主时间线上。我建议将每个对象视为一个单独的类,而不是将代码放在时间线上(这在 AS2 程序中太常见,而使用 AS3 则可以完全避免它)。例如,您要应用鼠标单击代码的影片剪辑可能是使用其自己的类创建的对象。假设 MovieClip 是一个球的图形。您应该创建一个扩展(继承)MovieClip 类的“Ball”类,并处理其中的 mouseclick 事件:

package 
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class myObjects.Ball extends MovieClip 
    {
        public function Ball ()
        {
            this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        }

        private function mouseDownHandler(event:MouseEvent):void
        {
            // Code
        }
    }
}

然后,在“库”窗格中找到球的 MovieClip,右键单击它,“属性”,切换到“高级”模式,选中“导出为 AS”。现在,请注意您的 MovieClip 是如何引用 MovieClip 类作为其基类的?您不再需要这个,因为您的 Ball 类扩展了 MovieClip 类。因此,在 Class 字段中写入“myObjects.Ball”并清除 Base 类字段。如果您编写了 Flash IDE 可以找到的命名空间 Ball 类的路径,您应该会看到一个绿色的复选标记。

现在,您的 Ball 类将使用该 MovieClip,因此当您在主类中创建 Ball 的新实例时,您可以像使用 MovieClip 一样使用它并将其动态附加到舞台。或者,您可以通过手动拖动 Ball MovieClip 将其添加到时间线中。

我解释的扩展类是 AS3 版本的“继承”(Ball 类继承了 MovieClip 类)。您还可以使用其他 OO 概念,例如,多态性 http://www.developria.com/2009/09/as3-object-oriented-concepts-p.html和封装。您应该尽可能将代码封装到单独的类中。假设您的项目中有几种不同类型的球 MovieClip,并且您希望 Ball 类成为足球、台球和棒球的父类。每个子类都可以扩展 Ball 类。我发现对大型项目有用的另一件事是创建一个静态类来处理我的应用程序的所有事件。因为我将它定义为public static class我可以将它导入到我的每个类中,并且它的变量在应用程序的持续时间内仅创建一次。这非常有用。

我还在类中创建了自己的伪析构函数,以便像 C++ 一样使用 AS3。实现此目的的最简单方法是在销毁对象的实例之前调用伪析构函数。我确实让它在一个应用程序中自动发生,所以如果有人对此感兴趣,我可以追踪代码..但是 AS3 在幕后处理垃圾收集,通常不需要析构函数,但也许我只是认为不需要,因为由于长时间使用 AS3 编程,我养成了坏习惯。

就我个人而言,我认为你越努力在 AS3 中开发应用程序,就像在 C++ 中开发一样,它就会变得越有趣,你的代码就越可重用。坚持下去..很快你就会得到一堆动作脚本文件,而不是一堆乱七八糟的代码,哈哈..有点双刃剑,但又怎么样。

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

如何避免 AS3 代码混乱 的相关文章

  • AsyncTask 也在 flash 中吗?

    我开发了一款大小为 27mb 的游戏 我将其加载到设备中 它的性能会降低 有时会挂起设备 这个游戏中使用了很多媒体资源 如果我在 android 中制作它 那么我会处理和异步任务 http developer android com ref
  • 在 ActionScript 中移动数组中的对象,产生体育场波浪效果

    我想移动数组中的所有对象 产生体育场波浪效果 我想根据舞台上的 y 值移动对象 我所有的方块大小都是 50x50 我想将它们向上移动然后向下移动 下面是我的代码 import fl transitions Tween import fl t
  • AS3 - 我可以知道一个类是否实现了一个接口(或者是另一个类的子类)?

    有了这个代码 function someFunction classParam Class Boolean how to know if classParam implements some interface 即比较classParam
  • 游戏开发者的 Flash 性能:本机渲染 VS BitmapData 帧缓冲区

    我开发了一款 2D 射击游戏很多物体 and 激进的滚动 问题 哪种方式更好 选择 1 使用原生 Flash 渲染 从 Bitmap 派生游戏对象 使用现有的 x y 宽度 高度 bitmapData 将所有对象添加为子 UI Compon
  • 使用 Swift 以编程方式闪烁屏幕(在“屏幕截图”上)

    为了从这里转换 Objective C 示例 如何以编程方式闪烁屏幕 https stackoverflow com questions 5254508 how to flash screen programmatically我写了以下代码
  • 将过滤器应用于 AS3 中的所有内容

    我正在尝试在 AS3 Flex SDK 中添加过滤器 我可以为任何一个对象添加一个过滤器 但我想将过滤器应用到一切那是某个对象的子对象 假设弹出一个暂停窗口 暂停窗口下方的所有内容都会变得模糊 将过滤器应用于每个单独的对象 例如 迭代列表
  • 还有其他访问相机的替代方法吗?

    除了使用 ActionScript 3 之外 还有其他方法来访问相机吗 import flash media Camera videoInstance attachCamera cameraInstance 或者我应该使用任何 API 吗
  • SWFUpload 还活着吗?

    我正在考虑在我的网站上使用 SWFUpload 但我看到最后一个版本是在 2010 年 3 月 而且它还是一个测试版 看起来 SWFUpload 的开发就停止了 这个项目还活着吗 还有其他选择吗 在我看来 SWF上传看起来很死 自 2010
  • NetStream.appendBytes

    我有一个连接到 Flash Media Server 的 netConnection 我正在尝试使用 Flash Player 10 1 中的新appendBytes 函数将本地FLV 文件流式传输到FMS 但是我遇到了问题 我在网上获取的
  • 使用flash动作脚本开发网络游戏

    简而言之 如果我想使用 Flash 技术开发在线游戏 你能告诉我一些很好的学习资源吗 包括3D游戏 您可以从新发布的开始Flash平台游戏技术中心 http www adobe com devnet games 在 Adob e Devne
  • Actionscript 内存管理、垃圾收集

    这个博客 http blogagic com 163 flex memory management and memory leaks varref 和其他人 指出 在清理对象时 您应该在 dispose 方法中将对象引用设置为 null 但
  • AIR/Actionscript 中没有这样的表 SQLITE_SEQUENCE

    我正在尝试使用 AIR ActionScript Flex 4 5 重置 SQLITE 中自动增量字段的种子 我正在做通常应该有效的事情 DELETE FROM SQLITE SEQUENCE WHERE NAME myTable 我已经检
  • Flex:获取自己的 SWF 文件名?

    有没有办法以编程方式确定我的类正在运行的 swf 文件名 Thanks Stage http livedocs adobe com flex 3 langref flash display Stage html has a 加载器信息 ht
  • 使用 Actionscript 3 连接到数据库 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找有关如何基于数据库在 Flash 中动态创建内容的建议 最初我想将数据库导出到 XML 文件并使用内置的 Actionscr
  • 在 AS3 中快速设置关键帧上的实例名称

    现在在 Flash CS3 及更高版本 使用 Actionscript 3 中 如果您在图层中的多个关键帧中使用相同的实例 并且您决定稍后分配或更改实例名称 则必须转到每个关键帧并设置实例名称 这是一个很大的麻烦 有没有更快或更好的方法来做
  • Chrome 更新阻止 Flash 自动播放 - 如何避免?

    我在 html 页面中嵌入了 YouTube 视频 我将 youtube iframe API 与 Flash 结合使用 在我的例子中 我无法使用 HTML5 视频 自上次 Google Chrome 更新以来 Chrome 会阻止自动播放
  • 有没有好的 AS3 代码片段/示例的指针?

    我是 AS3 的新手 每天都在学习 我正在寻找好的 AS3 代码片段 示例 小项目 我可以将其用于学习目的和参考 不依赖于 Flash IDE 因为我使用 Flex SDK 和 Flash Develop 此外 我还专门寻找有关音频 视频流
  • 如何在Android Air应用程序中通过as3打开Instagram页面?

    我想通过单击应用程序中的按钮来打开 Instagram 页面 例如 Instagram 应用程序中的 instagram mypage 代码是什么 mybuttun addEventListener MouseEvent CLICK ope
  • 此 xpath 查询的 Flex/AS3/E4X 等效项是什么?

    鉴于此文档
  • 如何保护swf文件不被反编译?

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

随机推荐

  • 如何在 Laravel 5.6 的默认注册表单中添加自定义字段?

    在我的一个拉拉维尔 5 6应用程序中 我需要在默认注册表单中添加更多字段 所以我只在默认注册表单中添加了一个字段来测试 phone no 注册 blade php 并且还添加phone no 注册控制器 但是当我单击注册按钮时 它显示以下错
  • 执行 Mariadb 更新语句时出错

    我正在使用以下更新语句来更新数据库表中的行 update department set budget budget 0 01 where dept name Physics 但是 运行此代码会出现以下错误 ERROR 1305 42000
  • 将 n 位的 std_logic_vector 向右或向左移位

    我有一个向量signal tmp std logic vector 15 downto 0 我必须将它向左或向右移动 n 位 我怎样才能实现这个操作 我想到了串联操作 但我不知道如何使用它 Use the ieee numeric std库
  • 使用 D3 获取实时数据

    我想知道是否可以使用 D3 库来处理我的服务器通过 websockets 发送的实时数据 我看不到任何证明这一点的文档或示例 我最初的期望是通过以下代码示例来做到这一点 ws new WebSocket ws localhost 8888
  • “属性应该是哈希值,但实际上是字符串”

    我在 Rails 3 应用程序中保存哈希时遇到问题 使用控制台时我可以保存它 只是当我通过表单提交哈希时它不起作用 这个问题解决了 https stackoverflow com questions 10345054 how to edit
  • 从数据库检索数据并将其显示在 php 的表中..看看这段代码有什么问题吗? [复制]

    这个问题在这里已经有答案了 db mysql connect localhost root er mysql select db ram query insert into names values name add1 add2 mail
  • Moose:如何获取对象数组?特质?

    我开始意识到这适合初学者 package Bad has arr gt is gt rw ArrayRef Str package main my bad Bad gt new arr gt foo bar print bad gt arr
  • 如何在 d3 中使用 mousedown 获取鼠标坐标?

    我正在尝试在 D3 中创建一个图形 您可以在其中绘制一个正方形来放大 现在 我正在尝试让 mousedown 功能正常工作 我需要能够单击图表中的任意位置并获取坐标 这就是我现在所拥有的 svg on mousedown mousedown
  • 批处理文件调用 %~1 并获取变量的当前值/字符串

    下面的代码与批处理文件 命令提示符 相关 我的问题是代码的一部分current value is 1实际上并不显示的值 1 我希望它说 string01 或 string02 我不太确定如何做到这一点 我环顾四周 但无法解决这个简单的问题
  • 如何创建多语言 Android 应用程序?

    我想创建一个多语言 Android 应用程序 有没有办法检测用户喜欢哪种语言 是否有推荐的方法在 Android 上管理多种语言 或者我应该重新发明轮子 是的 有一个推荐的方法来管理多种语言 对于 Android 来说 多语言支持很容易完成
  • 无法弄清楚为什么我在 Swift iOS 应用程序代码中收到“Class ViewController has noinitializer”错误

    我试图在我的 iOS 应用程序中制作一个教程屏幕 用户可以在其中滑动几张图片来了解有关该应用程序的一些信息 一切看起来都很好 除了当我构建项目时 我在第一行代码中收到以下错误 ViewController 类没有初始化器 我做错了什么 我的
  • 按变量对轴文本进行颜色显示

    我想根据数据集中的另一个变量来改变热图轴文本的颜色 这是我到目前为止所尝试过的 load data scale numeric columns add state abbreviation and region state data lt
  • 在哪里可以找到详尽的停用词列表?

    我在哪里可以找到详尽的停用词列表 我的那篇文章很短 似乎不适用于科学文本 我正在创建词汇链以从科学论文中提取关键主题 问题是像这样的词based regarding等也应被视为停用词 因为它们没有太多意义 您还可以轻松添加到现有的停用词列表
  • Xcode 8 内存图显示“无选择”且无法工作

    我正在使用 Xcode 8 0 和 Swift3 处理一个项目 我想使用内存图调试器 但它什么也没显示 预期外观 来自教程 为什么我不能使用这个功能 该项目是使用 Xcode 8 创建的 不是从旧版本的 Xcode 迁移的 bitcode与
  • protractor 2.5.4 E/launcher - 会话未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 79

    我进行了大量研究并使用了各个论坛中提到的许多可能的解决方案 但没有一个对我有用 我试图在 CI CD 管道中运行它 尽管能够在本地运行量角器测试用例并能够启动浏览器 但在 CI CD 管道构建中它失败了 详细信息如下 我在 package
  • 更改已验证应用程序的应用程序名称 - Google OAuth 同意屏幕

    我有一个经过验证的应用程序 我想更改 OAuth 同意屏幕应用程序名称 仅应用程序名称 为了做到这一点 似乎我需要再次重新验证这一点 但我的应用程序现在已经在生产中 如果我提交它进行验证 当前已验证的 OAuth 屏幕是否会突然显示为未验证
  • Python 正则表达式的 unicode 文本中使用的字边界

    我想在正则表达式中使用单词边界来匹配一些 unicode 文本 Unicode 字母在 Python 正则表达式中被检测为单词边界 如下所示 gt gt gt re search r by b y lt sre SRE Match obje
  • 如何正确卸载python jupyter?

    I have jupyter安装有python3 5 on my Mac OSX 但我想要python2 7版本 所以 我基本上需要卸载3 5版本 然后重新安装2 7版本 但由于某种原因我无法卸载3 5版本 我试过sudo python3
  • Python中使用行数作为输入变量分割大文本文件的快速方法

    我使用行数作为变量来分割文本文件 我编写这个函数是为了将吐出的文件保存在临时目录中 除最后一个文件外 每个文件有 4 百万行 import tempfile from itertools import groupby count temp
  • 如何避免 AS3 代码混乱

    我使用 ActionScript 3 进行编程已经有一段时间了 我注意到我的代码的自然进展似乎采用一个巨大的文档类的形式 其中包含数十个成员变量 回调和舞台上对象的句柄 简而言之 有点乱 问题是 我真的没有找到解决办法 至少目前还没有 我在