我有以下代码,仅用于测试,因为这是我想要解决的一种错误:
_shader = new Shader(new TheShader() as ByteArray);
_shader.data.width.value = [64.0];
_shader.data.height.value = [64.0];
_shaderFilter = new ShaderFilter(_shader);
_sequence = new Vector.<BitmapData>();
var smallBD:BitmapData;
var i:int;
_delta = new Point();
var megabase:BitmapData = new TheBitmap().bitmapData;
var _rect:Rectangle = new Rectangle(0, 0, 64, 64);
for (i = 0; i < 64; i++) {
smallBD = new BitmapData(64, 64, true, 0x00808080);
//_rect.x = i;
_rect.y = i;
smallBD.applyFilter(megabase, _rect, _delta, _shaderFilter);
_sequence.push(smallBD);
}
然后我循环遍历 _sequence 以查看更改矩形是否确实有效。如果 _shaderFilter 实际上是一个着色器过滤器,它什么也不做。使用任何内置 Flash 过滤器进行测试都可以按预期工作,但使用 ShaderFilter 时,它有时会像提供的矩形显然是 sourceBitmapData.rect 一样工作,无论源位图是什么,有时它的行为就像没有传递数据一样,边界是位于奇怪的位置 - 使用大小为 512x384 的位图,传递给着色器的区域的边缘显然位于 (256,192) 或位图的中心。到目前为止,我只能实现一种解决方法,即首先将所需区域 copyPixels(),然后将 applyFilter() 到位。有人可以证明这是一个错误而不是我做错了什么吗?
PS:我正在使用 FlashDevelop,项目目标是 Flash Player 10.3,我不知道 FP11 是否修复了这个问题。