我有一个奇怪的问题,即除非调整浏览器大小,否则Chrome中的Flash Player不会更新。该应用程序是一个在线设计工具,用Flex编写,其中一个功能允许用户上传图像并裁剪它。图像加载正常,裁剪操作不会重新加载图像,但使用Bitmap.copyPixels创建裁剪版本。
当我在localhost上测试时(虽然本地服务器不仅直接来自文件系统),问题也不会发生。但是,在我们的QA服务器上,除非您调整浏览器大小,否则不会出现图像,因为我认为强制屏幕刷新。
我已经尝试了AS3 / Flex中所有常见的嫌疑人强制重绘,updateAfterEvent,invalidateDisplayList等。
我们提出的一个hacky解决方案是用一个像素调整浏览器的大小,但这显然不是理想的,我更喜欢解决方案来解决这个问题:)
谢谢!
这是用于参考的位图代码......
var cropData:BitmapData = new BitmapData( _crop.width, _crop.height );
var originalData:BitmapData = new BitmapData( _loader.width, _loader.height );
originalData.draw( _loader );
cropData.copyPixels( originalData, _crop, new Point() );
var crop:Bitmap = new Bitmap( cropData );
crop.smoothing = true;
this.addChild( crop );
if ( _width > 0 && _height > 0 )
{
crop.width = _width;
crop.height = _height;
}
答案 0 :(得分:2)
我的第一个冲动是两个环境的编译器不同。我曾经发现Flash Builder和Linux下的mxmlc编译的结果不一样。
答案 1 :(得分:2)
尝试将enterFrame事件添加到“this”并移动裁剪位图以查看会发生什么。从它的外观来看,它是flash / chrome的一个bug。它适用于其他浏览器吗?
修改强>
尝试添加此内容并查看会发生什么:
var crop:Bitmap = new Bitmap( cropData );
crop.smoothing = true;
this["cropTest"] = crop; // Add this
this.addEventListener(Event.ENTER_FRAME, onEnterFrameTest); // Add this
this.addChild( crop );
// Add this function
protected function onEnterFrameTest(evt : Event) : void {
this["cropTest"].x += this["cropTest"].x > 0 ? -1 : 1;
}
如果它出错,只需将此[[cropTest]]切换为声明的变量即可。
<强> EDIT2:强>
使用以下内容替换所有显示的代码:
this["loaderTest"] = _loader;
this.addEventListener(Event.ENTER_FRAME, onEnterFrameTest); // Add this
// Add this function
protected function onEnterFrameTest(evt : Event) : void {
this.removeEventListener(onEnterFrameTest);
var _loader = this["loaderTest"];
var cropData:BitmapData = new BitmapData( _crop.width, _crop.height );
var originalData:BitmapData = new BitmapData( _loader.width, _loader.height );
originalData.draw( _loader );
cropData.copyPixels( originalData, _crop, new Point() );
var crop:Bitmap = new Bitmap( cropData );
crop.smoothing = true;
this.addChild( crop );
if ( _width > 0 && _height > 0 )
{
crop.width = _width;
crop.height = _height;
}
}
答案 2 :(得分:1)
flash播放器嵌入了wmode param设置为'opaque',这个设置似乎偶尔出现在Chrome的Flash播放器中的错误,其中关闭Flex mx:Panel组件不会导致屏幕更新
删除wmode参数修复了上述问题,但错误仍然存在。