首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效的新BitmapData(w,h);获取ArgumentError: Error #2015: Invalid,工作一段时间,然后因此错误而停止

问无效的新BitmapData(w,h);获取ArgumentError: Error #2015: Invalid,工作一段时间,然后因此错误而停止
EN

Stack Overflow用户
提问于 2012-07-10 08:00:12
回答 1查看 2.8K关注 0票数 2

我有一个游戏,当玩家探索时,它会产生新的地形块,以允许似乎无限的关卡大小。它一直工作得很好,但我决定让我的角色在一个方向上移动很长一段时间,最终它得到了这个错误:

代码语言:javascript
复制
ArgumentError: Error #2015: Invalid BitmapData.
        at flash.display::BitmapData/ctor()
        at flash.display::BitmapData()

在这一行代码中:

代码语言:javascript
复制
this.new_chunk.background_bitmap_data = new BitmapData(this.level_obj.block_size *  this.new_chunk.blocks_wide + this.level_obj.oversize_bmd_offset,this.level_obj.block_size * this.new_chunk.blocks_tall + this.level_obj.oversize_bmd_offset,true,0x00000000);

我在提供用于创建位图数据的宽度和高度值的变量/方程上运行了一个trace();,它不断地输出相同的值,正如预期的那样:

代码语言:javascript
复制
2150 1300

我在许多不同的方向上运行我的角色,无论方向如何,最终都会发生同样的事情。我知道BitmapData不会变得太大,因为它总是2150x1300。

注意:在一个小区域内不会发生错误,无论我让游戏运行多长时间,错误只会在一个方向上移动很长时间后才会发生,从而产生大量新的关卡块。

你知道为什么flash会抛出这个错误吗?

编辑:

这是这个游戏的现场演示,这样你就可以更好地了解发生了什么:http://test.webskethio.com/boxy/

(用于移动的控件为W.A.S.D,按住shift可更快地移动。)

每个“块”是游戏屏幕本身的大小,每个块存储组成它的所有较小BitmapData的缓存BitmapData (草、树、岩石、花等的瓦片)。当块与舞台足够近时,块BitmapData将加载到舞台上的Bitmap中,最终可能需要渲染它。

编辑2:

我上传了一张图片来说明我认为艾米为我的游戏提出的渲染方法,它不需要存储许多BitmapData对象:

​

​

四个角彩色区域是将绘制到屏幕上的一个Bitmap的BitmapData对象(与用户屏幕的大小相同,以绿色表示)。整个事物周围的黑色区域表示在某一点上可能是其他BitmapData对象的东西,这些对象已经被设置为null,因为它们不再需要。

随着玩家的移动,4个角BitmapData对象将被重新绘制到具有新的点坐标的主Bitmap中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-10 18:50:41

我无法重现你的错误。

我带着shift一直往北跑了大约5分钟,内存消耗增长到3+GiB,然后我离开了内存,所以它开始使用交换空间,变得非常慢。

所以,我猜你只是耗尽了内存,而flash的错误对于这种情况来说有点奇怪。尝试释放旧的位图,或者更好地重用它。推荐的方法通常是在任何时候都有4个屏幕大小的位图,当你向东移动时,对东部的新区域重复使用西部的位图,反之亦然,对北部和南部也是如此。

此外,我还看到一个非常烦人的闪烁的白色条纹。我不知道这是否是真正的原因,但它通常发生在有人没有使用双缓冲时。

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

https://stackoverflow.com/questions/11404908

复制
相关文章

相似问题

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