我有一个游戏,当玩家探索时会产生新的地形块,以允许看似无限的关卡大小。它一直运行良好,但我决定让我的角色向一个方向移动很长时间,最终它得到了这个错误:
ArgumentError: Error #2015: Invalid BitmapData.
at flash.display::BitmapData/ctor()
at flash.display::BitmapData()
在这行代码:
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();
提供用于创建位图数据的宽度和高度值的变量/方程上运行了一个,并且它不断输出相同的值,如预期的那样:
2150 1300
我在许多不同的方向上运行我的角色,无论方向如何,最终都会发生同样的事情。我知道它BitmapData
不会变得太大,因为它总是 2150x1300。
注意:在小范围停留时不会出现错误,无论我让游戏运行多久,只有在一个方向长时间移动后才会出现错误,生成大量新的关卡块。
任何想法为什么 flash 会抛出这个错误?
编辑:
这是游戏的现场演示,因此您可以更好地了解正在发生的事情: http ://test.webskethio.com/boxy/
(控制是 WASD 移动,按住 shift 移动更快。)
每个“块”是游戏屏幕本身的大小,每个块存储组成它BitmapData
的所有较小BitmapData
s 的缓存(草、树、岩石、花等的瓦片)。块BitmapData
被加载到Bitmap
一个当块足够接近最终需要渲染的阶段时的阶段。
编辑2:
我上传了一张图片来说明我认为 Amy 为我的游戏提出的不需要存储许多 BitmapData 对象的渲染方法:
四个角落的彩色区域是BitmapData
将被绘制到Bitmap
屏幕上的对象(与用户的屏幕大小相同,以绿色表示)。整个事物周围的黑色区域表示在某一点可能是其他BitmapData
对象设置为,null
因为它们不再需要。
Bitmap
随着玩家的移动,4 个角的 BitmapData 对象将用新的点坐标重新绘制到主坐标。