作者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
→ MrMarcus:更正,100x100的原始圖片會執行10,000次 06/17 22:51
推 zhengyao:我想請問很慢的意思是lag還是cpu 100%......? 06/18 08:59