Scaleform BitmapData:无效的Bitmapdata

时间:2016-08-07 16:14:12

标签: actionscript-3 scaleform

我试图添加"火力效果"到我们的UI。 我使用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:使用Scaleform:4.1.19

发布到Flash 10.3

由于

1 个答案:

答案 0 :(得分:1)

自版本4.1(reference)起,Scaleform支持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