问题标签 [avm2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
59 浏览

c - 如何使用 Flash 中的 Sampler 类获得微时间?

我已经尝试了一切以使用采样器类在 Flash 中获取微时间,但无济于事。到目前为止,这是我的代码:

这是SamplerSamplerScript扩展类。它正在呼唤setconst_time时间。它也可能调用另一个方法:

正如在Sampler核心类中看到的那样。

我希望有一种getMicroTime()方法(参见getTimer())但没有。所以我试图在代码块之前和之后创建示例。调用getSamples应该返回一个对象数组Sample。每个Sample实例都应该有一个sample.time以微秒为单位的时间属性。但是,使用上面的代码,没有采样。样本计数为零。

0 投票
1 回答
460 浏览

actionscript-3 - ActionScript AVM2 avm2.intrinsics.memory 包缺少函数

我有一个 swf 文件,我反编译了它。我得到了 fla 和文件,我正在尝试运行这些文件,但我得到了这些错误

并且这些功能必须在 avm2.intrinsics.memory 这个包中,但不存在我试图更改 SDK 版本 AIR 3.5 ,这个包附带的 3.6 ,3.7 和其他一些,但不是这些功能。问题是什么

0 投票
0 回答
303 浏览

actionscript-3 - 如何制作自定义 Flash Player?

我目前正在创建我自己的 Flash Player 的项目,我可以实现我自己的自定义处理和执行正在浏览器中播放的 SWF 文件。不幸的是,Adobe Flash Player 和 Chrome 的 Pepper Flash 这两个主要版本都是封闭源代码,因此我无法直接创建自己的版本。但是,我可以以某种方式修改这些,或者我能看到的最好的替代方案是什么,可以播放大多数 Flash 内容?

0 投票
1 回答
147 浏览

actionscript-3 - ActionScript 字节码 AVM2 中的 initscopedepth 是什么?为什么使用 getlocal_0 和 pushscope?

我查看了AVM2 概述文档(第 4.11 章,第 33 页)并发现以下内容init_scope_depth

init_scope_depth
init_scope_depth 字段定义了max_scope_depth可以在方法内访问的相对于 的最小范围深度。
max_scope_depth
max_scope_depth 字段定义了可以在方法内访问的最大范围深度。max_scope_depth和之间的差异init_scope_depth决定了本地范围堆栈的大小。

我还在ActionScript 3.0 Bible book上看到了关于范围链的引用,我认为它与 相关init_scope_depth,并说:

作用域链,如图 2-1 所示,是一个内部设备,用于在函数执行期间管理变量作用域。
引用变量时,Flash Player 会从最近调用的函数开始并检查变量声明。如果在最本地范围内找不到该值,它会向上移动一级到调用该函数的父函数并在那里检查。这个过程一直持续到作用域链一直被检查到全局作用域。

图2-1

如图所示,我们的范围顺序是,从上到下:

function scope -> parent function(s) scope (if any) -> instance of the class calling the function -> static instance of the class calling the function -> global scope

另请注意,范围链可以根据类继承具有更多级别。

现在我的问题来了:

我一直在玩 JPEXS Free Flash Decompiler 和 RABCDAsm,我Global在一个名为Data. 该类不扩展任何其他类,但实现了一个接口。在这个类中,有普通方法和静态方法。我注意到静态方法已initscopedepth设置为 3,而普通方法已initscopedepth设置为 4。(注意:这些值由编译器设置,如AVM2 概述文档第 4.11 章中所述)。

我的猜测是初始范围是:

method -> instance of class -> static instance of class (static variables) -> global

但我不确定,想知道是否有人可以证实这一点。

这也引出了我另一个问题。所有的方法code块,无论是普通的还是静态的,都从代码开始:

(注意:在这两条指令之后是方法开始的任何指令。)可能是因为,对于普通对象,它将 推this入作用域堆栈,而对于静态方法,它将类的静态实例推入作用域堆栈? 如果是这样,为什么有必要这样做?