首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scaleform BitmapData:无效的位图数据

Scaleform BitmapData:无效的位图数据
EN

Stack Overflow用户
提问于 2016-08-08 00:14:12
回答 1查看 220关注 0票数 1

我试着在我们的用户界面中添加一个“火焰效果”。我正在使用BitmapData和PerlinNoise以及其他一些工具来实现这一点。

当我对BitmapData执行的任何操作都会导致以下错误时,问题就出现了:

代码语言:javascript
复制
 ArgumentError: Error #2015: Argument error: Invalid BitmapData.
    at effects::FireFX/updateBitmaps()...

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

代码语言:javascript
复制
displayBmp = new BitmapData(200, 200, true, 0);
scratchBmp = displayBmp.clone();

在我的例子中,像clone()或perlinNoise()或colorTransform...这样的函数。等等。都是造成坠机的原因。

在Animate CC下调试/运行它工作得很好。

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-08-31 02:39:04

从4.1版(reference)开始,Scaleform支持BitmapData应用程序接口。但是,4.1.19是4.1的第一个版本,因此是支持BitmapData的初始版本。您可能希望升级到较新的版本,因为自初始版本以来,BitmapData支持肯定已经得到了修复。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38816071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档