[問題] 大量TextField透過addChild加入畫面效能問題
最近需要製作一個半色調特效,大致上是讀入一張點陣圖,計算每個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
→
06/17 22:51, , 1F
06/17 22:51, 1F
推
06/18 08:59, , 2F
06/18 08:59, 2F