看这里,美女在这里!
事实上本来是要完结的,结果使用过程中有了一些坑人的地方,以及我在前面教程中说错了的地方。
所以特发此篇,以告诉大家一些注意事项和帮助大家更加顺利的使用多线程这个技术。
1. 使用调试模式或正常模式,发布SWF(主线程、子线程),并非一定
我使用Flash CS6,必须使用调试模式发布主线程fla,使用正常模式发布子线程fla。
但是我又使用了Flash CC2014,AIR 18,则两个线程fla都需要正常发布SWF可以才。
Flash Builder 4.7 可以用调试模式导出SWF(iloveas(格美)大神给我说的)。
所以都不是一定的,需要大家自己测试实验。
2. MessageChannel 通信的其他注意点
它虽然说是支持复杂对象通信,但实际只能是有简单对象组成的复杂对象,自定义对象应该也是只能由简单对象组成(String、Number、int、uint、Boolean)。
如果要传输更加复杂的对象必须考虑使用ByteArray
3.ByteArray通信的注意点
使用图片处理时候,通信的方式应该是:
[Actionscript3] 纯文本查看 复制代码
//// 主线程代码,至少要发送两次(这样保险一些),保证发送的先后顺序
// bitData是要传入的BitmapData对象
// 1
var objWH : Object = { width : bitData.width, height : bitData.height };[/align][align=left]
// 2
var byte : ByteArray = new ByteArray();
byte.shareable = true; // 这个必须的
byte.writeBytes( bitData.getPixels( bitData.rect )) ; // 先使用get方法将位图对象转换成ByteArray对象,然后将返回的ByteArray写入byte中
//// 子线程代码
// 1
var objWH : Object = obj ; // 接收的obj对象
// 2
var byte : ByteArray = byte as ByteArray ; // 接收的ByteArray对象
var bitData : BitmapData = new BitmapData( objWH.width, objWH.height ); // 使用第一个接收的obj对象的宽和高设置
bitData.setPixels( bitData.rect, byte ); // 还原BitmapData对象