我试图添加"火力效果"到我们的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由于
答案 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::Advance
和HAL::Display
的情况。您可以看到ThreadCommandQueue
实现的更复杂版本,在RenderHALThread
类的Scaleform示例中使用,将大部分重要实现推迟到RTCommandQueue
。