1

我正在尝试向我们的用户界面添加“着火效果”。我正在使用 BitmapData 和 PerlinNoise 以及其他一些方法来实现这一点。

当我对 BitmapData 所做的任何事情都会导致此错误时,就会出现问题:

 ArgumentError: Error #2015: Argument error: Invalid BitmapData.
    at effects::FireFX/updateBitmaps()...

像这样简单的事情会导致错误出现。

displayBmp = new BitmapData(200, 200, true, 0);
scratchBmp = displayBmp.clone();

就我而言,clone() 或 perlinNoise() 或 colorTransform.... 等函数会导致崩溃。

在 Animate CC 下调试/运行它就可以了。

PD:发布到 Flash 10.3,使用 Scaleform:4.1.19

谢谢

4

1 回答 1

1

Scaleform 从 4.1 版开始支持 BitmapData API(参考)。但是,4.1.19 是 4.1 的第一个版本,因此是支持 BitmapData 的初始版本。您可能想要升级到较新的版本,因为 BitmapData 支持自最初发布以来肯定已经修复。

出现此错误的最常见原因是没有将ThreadCommandQueue实例MovieDef::CreateInstance作为最后一个参数传入,并且在第一帧上使用了 BitmapData 操作。如果没有 的实例ThreadCommandQueue,渲染器将无法为 Scaleform 中的 BitmapData 对象创建支持。在以后的版本中,Scaleform 中添加了更具描述性的警告。

对于ThreadCommandQueue,您通常需要自己实现它,以便与应用程序的渲染代码正确集成。最简单的多线程实现将简单地将ThreadCommand对象存储在(线程安全)列表中,当从调用时,并在应用程序渲染循环期间的某个时间点PushThreadCommand调用对象。Execute

在 SDK 的更高版本中,提供了一个名为 的类SingleThreadedCommandQueue,它提供了一个基本实现,可以立即执行所有命令。这仅在您使用Movie::AdvanceHAL::Display在同一线程上时才有效。您可以看到一个更复杂的ThreadCommandQueue实现版本,在RenderHALThread类的 Scaleform 示例中使用,它将大部分重要的实现推迟到RTCommandQueue.

于 2016-08-30T18:39:03.647 回答