作者MrMarcus (请勿忘记密码)
看板Flash
标题[问题] 大量TextField透过addChild加入画面效能问题
时间Thu Jun 17 04:46:50 2010
最近需要制作一个半色调特效,大致上是读入一张点阵图,计算每个pixel的灰值
然後以一个大小不同的圆圈去放置在该处取代原本的色彩。这部分没甚麽问题,
但是後来把效果延伸到可以使用文字来代替圆圈,就出现了效能上的问题。
使用圆圈时,是使用类似以下方式(target是一个Sprite物件):
target.graphics.beginFill(color);
target.graphics.drawCircle(x, y, radius);
target.graphics.endFill();
测试使用一张100x100的图片,上述动作会执行5000次,速度可接受。
使用文字来取代圆圈时,是类似:
var tx:TextField = new TextField();
var tf:TextFormat = new TextFormat();
tf.color = color; // 设定文字颜色
tf.size = size; // 设定文字大小
tf.font = "华康粗黑体"; // 已将用到的字体内嵌。
tx.embedFonts = true;
tx.text = getCharacter(); // 依照特定规则产生一个字母(也可能是中文字)
tx.setTextFormat(tf);
tx.x = x;
tx.y = y;
addChild(tx);
同样执行约5000次,速度就不能接受了。在此想请教各位像这样将大量
TextField加入画面时,有甚麽方式可以有较好的效能?我曾经尝试将
TextField转成bitmapData然後用:
target.graphics.beginBitmapFill(bitmapData);
target.graphics.drawRect(x, y, w, h);
target.graphics.endFill();
不过速度跟直接使用addChild()差不多,都很慢,而且出来的效果没有使用
addChild好看。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 116.232.98.36
1F:→ MrMarcus:更正,100x100的原始图片会执行10,000次 06/17 22:51
2F:推 zhengyao:我想请问很慢的意思是lag还是cpu 100%......? 06/18 08:59