[問題] 大量TextField透過addChild加入畫面效能問題

看板Flash作者 (請勿忘記密碼)時間14年前 (2010/06/17 04:46), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
最近需要製作一個半色調特效,大致上是讀入一張點陣圖,計算每個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
更正,100x100的原始圖片會執行10,000次
06/17 22:51, 1F

06/18 08:59, , 2F
我想請問很慢的意思是lag還是cpu 100%......?
06/18 08:59, 2F
文章代碼(AID): #1C6JWyvK (Flash)