- 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/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: template pass by value or const reference or…? 以下对于将函数
我用相同的参数列表重载了一个运算符两次。但返回类型不同: T& operator()(par_list){blablabla} const T& operator()(par_list){bla
假设我有实现接口(interface) I 的 Activity A。我的 ViewModel 类 (VM) 持有对实现接口(interface) I 的对象的引用: class A extends
PHP 如何解释 &$this ?为什么允许? 我遇到了以下问题,这看起来像是 PHP 7.1 和 7.2 中的错误。它与 &$this 引用和跨命名空间调用以及 call_user_func_arr
谁能解释一下下面“&”的作用: class TEST { } $abc =& new TEST(); 我知道这是引用。但是有人可以说明我为什么以及什么时候需要这样的东西吗?或者给我指向一个对此有很好解
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 C++ 引用 vs 指针 引用很容易与指针混淆,它们之间有三
目录 引言 背景 结论 引言 我选择写C++中的引用是因为我感觉大多数人误解了引用。而我之所以有这个感受是因为我主持过很多C++的面试,并且我很少
Perl 中的引用是指一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至函数,可以应用在程序的任何地方 创建引用 定义变量的时候,在变量名前面加个 \,就得到了这个变量的一个引用 $sc
我编写了一个将从主脚本加载的 Perl 模块。该模块使用在主脚本中定义的子程序(我不是维护者)。 对于主脚本中的一个子例程,需要扩展,但我不想修补主脚本。相反,我想覆盖我的模块中的函数并保存对原始子例
我花了几个小时试图掌握 F# Quotations,但我遇到了一些障碍。我的要求是从可区分的联合类型中取出简单的函数(只是整数、+、-、/、*)并生成一个表达式树,最终将用于生成 C 代码。我知道使用
很多时候,问题(尤其是那些标记为 regex 的问题)询问验证密码的方法。似乎用户通常会寻求密码验证方法,包括确保密码包含特定字符、匹配特定模式和/或遵守最少字符数。这篇文章旨在帮助用户找到合适的密码
我想通过 MIN 函数内的地址(例如,C800)引用包含文本的最后一个单元格。你能帮忙吗? Sub Set_Formula() ' ----------------------------- Dim
使用常规的 for 循环,我可以做类似的事情: for (let i = 0; i < objects.length; i++) { delete objects[i]; } 常规的 for-
在 Cucumber 中,您定义了定义 BDD 语法的步骤;例如,您的测试可能有: When I navigate to step 3 然后你可以定义一个步骤: When /^I navigate t
这是什么UnaryExpression的目的,以及应该怎样使用? 最佳答案 它需要一个 Expression对象并用另一个 Expression 包裹它.例如,如果您有一个用于 lambda 的表达式
给出以下内容 $("#identifier div:first, #idetifier2").fadeOut(300,function() { // I need to reference jus
我不知道我要找的东西的正确术语,但我要找的是一个完整的引用,可以放在双引号之间的语句,比如 *, node()、@* 以及所有列出的 here加上任何其他存在的。 我链接到的答案提供了一些细节,但还
This question's answers are a community effort。编辑现有答案以改善此职位。它当前不接受新的答案或互动。 这是什么? 这是常见问答的集合。这也是一个社区Wi
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
考虑下一个代码: fn get_ref(slice: &'a Vec, f: fn(&'a Vec) -> R) -> R where R: 'a, { f(slice) } fn m
我是一名优秀的程序员,十分优秀!