- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个非常令人沮丧的 Actionscript 2 问题,我遇到了与在时间轴上创建的类关联的影片剪辑,需要立即在代码中引用:
-- 我的库中有一个与类“C”关联的影片剪辑“C”。
-- 类“C”扩展了 MovieClip。
-- 我在舞台上有一个电影剪辑,其帧标签为“关闭”和“打开”。此影片剪辑的实例名称为“mc”。
-- 在“on”框架上有一个类“C”的实例,实例名称为“inst”。
-- 类“C”的构造函数包含一个跟踪语句以输出“C 构造函数!”让我知道舞台上的实例何时创建。
现在假设我运行这段代码:
mc.gotoAndPlay("on");
var inst_mc:MovieClip = mc.inst;
if (inst_mc){
trace("inst_mc found!");
}else{
trace("inst_mc NOT FOUND!");
}
var inst_c:C = C(mc.inst);
if (inst_c){
trace("inst_c found!");
}else{
trace("inst_c NOT FOUND!");
}
似乎在当前帧的所有代码都执行完之后,才会创建 C 类下的任何对象,因为输出将是这样的:
inst_mc found!
inst_c NOT FOUND!
C constructor!
这到底是怎么回事?我已经明确地告诉 Flash 创作环境,影片剪辑 C 与类 C 相关联,而类 C 是 MovieClip 派生的。所以在我的代码中,gotoAndPlay("on") 将创建位于“on”帧上的影片剪辑“inst”。它能够很好地找到实例,但是当我将其视为类型 C 时,它失败了。然后构造函数发生在所有这些之后。我该如何解决?我希望一旦您更改了时间轴上的某些内容,就会立即创建相应的对象——而且它们确实是,除非不是作为它们的显式类类型。我可以引用我的实例,但只能作为 MovieClip。我到底该如何解决这个问题?它应该输出:
C constructor!
inst_mc found!
inst_c found!
感谢您的帮助!
* 更新 *感谢您的回复!不幸的是,我的项目没有简单的修复方法,它现在很大并且不容易重组(它也太大而无法转换为 AS3)。我考虑过将 MC 保留在第 1 帧并隐藏它们,但我认为这会不必要地增加开销。即使_visible设置为false,那不还是要耗尽资源吗? (这是一个不同但相关的问题——如果你有一个不可见的复杂、固定的 MC 与根本没有它,性能有什么不同吗?)
我目前的策略是这样的:
mc.gotoAndPlay("on");
var inst_mc:MovieClip = mc.inst;
var inst_c:C = C(mc.inst);
if (inst_c){
// Even though I moved to the "on" frame,
// the object was already initialized/existed already
// so i can use its class code now
inst_c.do_something_now();
}else{
// The class is not accessible, so set a boolean flag
// which will get dynamically assigned to the *movie clip*.
// The constructor in class C will look to see if the flag
// has already been set. If so, it calls do_something_now()
// within C's constructor.
// In class C, trigger_do_something_now is a defined as a
// Boolean with no default value.
// It is not set in the constructor.
inst_mc.trigger_do_something_now = true;
}
这种方法让我很困扰。这是困惑和困惑。但是,我认为这是一个合理的解决方法。你们有什么感想?谢谢!
最佳答案
不幸的是,这就是 AS2 中“面向对象”代码的工作方式。这就是您应该如何想象它:当时间轴播放头在 A 帧上时,您调用 gotoAndStop(B)
,播放头立即前进,并创建任何必要的对象,但任何时间轴脚本您帧 B 上的 have 尚未执行,因为 Flash 仍在完成帧 A 的执行。直到 Flash 的内部循环的下一次迭代才处理帧 B。
自从上课只是众所周知的送奶工眼中的一闪而过的日子以来,事情就是这样。正如您可以猜到的那样,对于类附加剪辑,一切都一样 - 当您将播放头移动到帧 B 时,Flash 在帧 B 上创建所有内容,但它不运行任何驻留在帧 B 上的脚本 - 这包括构造函数刚刚创建的剪辑 - 直到下一帧。
最简单的解决方法是修改时间轴,以便在第 1 帧中创建有问题的 MC,但在执行 gotoAndStop 命令之前保持隐藏(或非事件、后台等)。您可以通过在给定框架的 IDE 中更改它的 alpha(等)来完成此操作,或者通过在执行 gotoAndStop 的同时调用 init 方法来完成此操作。 最佳 解决方法是使用 AS3,如果可以的话。您还可以选择其他方式,但我推荐这两种方式中的一种。
编辑更新:是的,“您可以采用的其他方法”之一是将参数放入剪辑或其父级中,并让剪辑在初始化时查找它们,但是最终维护您的代码的任何人都不会感谢您.但我确实做到了。 ;)
在回答您的附带问题时,带有 _visible=false 的剪辑如果在舞台范围内会产生非常小的开销。它没有呈现,但有一个非常小的命中,我认为这与 Flash 计算其边界或类似的东西有关。 (我跑了一次测试,你真的需要数千个才能衡量它。)即使这是一个性能影响问题,解决方法是将不可见的剪辑移到舞台的边界之外。然后他们不会招致任何处理器命中,我发现,他们只使用脚本内存(如果你延迟他们的初始化直到他们准备好使用,那么内存很少)。
请记住,无论剪辑是否可见,事件处理程序都会触发,因此在初始化剪辑之前不要让剪辑注册事件。我要做的是使用属于构造函数的所有内容创建一个 init() 方法,并在您原本构建剪辑的地方调用它。
关于flash - 在 Actionscript 2 中立即引用影片剪辑类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896335/
我在 mac 上,我有一个预先存在的 Flash 项目。 (即通常的 fla、src、lib)文件夹。 现在,我想开始使用 Flash Builder 4 编写代码。 如何导入所有这些文件,以便我现在
我在 Flash 视频播放器中遇到了一个奇怪的、很难重现的图形故障!,目前仅在 Chrome 中。 “进入建筑物”下方的灰色矩形显示了 Flash 播放器所在的 html div 的背景颜色。“我们在
我对 Flash 有点陌生,我只是找不到一种很好的方法来控制我添加到容器影片剪辑中的元素的位置。 我所做的是 addChild 到我的目标容器 Movie Clip 和控件 child 的 x,y 值
我是一名 AS3 开发人员,习惯于使用 Flash Builder。我正在与一位使用 Flash Professional 为游戏设计 Sprite 和背景的设计师合作。我希望为我们创建一个集成的工作
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当您像下面那样在 FLash Builder 中嵌入媒体时,它会创建一个类来引用 [Embed(source="images/list.png")] protected static const LI
有没有办法在 Flash 上本地启用跳帧? 当您开发游戏时,您会开发动画以匹配游戏玩法的节奏,并以目标帧速率(Flash 通常为 24-40fps)进行制作。但是如果用户的电脑速度太慢,无法保持目标帧
大家好,我想知道 AS3 中的 dispatchEvent 是什么。 谷歌搜索时没有任何想法。 :( 所以请帮帮我 编辑1: public static const SET_VOLUME:Strin
我多次听说我应该避免在我的网站上使用 Flash。然而,没有人告诉我这样做的充分理由。我已经搜索了原因,我看到很多不正确的(例如 Flash 中的文本不能被搜索引擎索引),或者不一定是真实的或足够重要
我正在为一个非常大的网站做一些测试,创建了许多不同的开发人员。有没有办法判断网站是否在使用 flash和/或已加载闪存 plugin ?如果页面使用 Flash,有没有办法告诉页面/代码的哪一部分触发
我正在研究“Foundation Actionscript 3.0”一书中的音频播放器演示。当我尝试发布 AudioDemo_final.FLA 文件时,出现以下错误:“Adobe Flash CS3
我有一个特定的FLA,每次尝试编译时都会崩溃(切换到Snow Leopard之后)。 Flash只是停滞不前,我被迫使用“强制退出” ...我不知道是什么原因造成的,并且找不到任何崩溃报告。 Flas
所以我非常熟悉 Java、C 和 C++ 中的内存管理;然而,在闪存中有哪些结构用于内存管理?我假设 flash 有一种像 java 的虚拟机,并且我一直假设当它们被设置为 null 时会被垃圾收集。
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
是否可以在 flash 中创建 UDP 套接字连接?我知道 RTMPF,但它不提供对 UDP 的访问。我知道在 AIR 中它是可能的,但我正在寻找一种“闪光”解决方案。 谢谢你 最佳答案 号 UDP
不知道如何表达这个意思,但是我想知道是否可以创建一个全面的错误处理程序来保护整个代码,然后发送给自定义处理程序,该程序在程序中以图形方式输出信息。类似于以下内容: root.addEventListe
我正在尝试创建可在不同场景中使用的UI影片剪辑。 它使用来自根范围的变量来确定状态。 当我按下静音按钮时,效果很好,但是当我尝试取消静音时,就变得很奇怪。有时需要2次点击才能取消静音,有时还需要更多。
是否可以通过麦克风记录最终用户? 我可以用录音做什么 Action ? 例如,我能否实时获得声音(分贝)的音量? 我可以将记录保存到文件中吗? 谢谢。 最佳答案 是的,Flash允许(具有用户许可权)
当我访问我之前在 IE 中构建的站点时,我在浏览器底部弹出消息栏,提示该站点想要运行 Flash。 这很好,除了网站中没有任何 Flash。 什么会导致这种情况? Flash 现在怎么会出现在站点中?
概要 我正在尝试制作一个包含多个相同SWF的网页。我有一个问题,它的加载速度太慢了(虽然下载时间还不错)。我在每个单元格中都有一个4x4表格,在iframe中嵌入了一个swf文件。 (注意:4 X 4
我是一名优秀的程序员,十分优秀!