作者Jerrynet (聖石小子)
看板Flash
標題Re: [問題] 請問Flash Player 的 使用硬體加速...
時間Thu Sep 4 14:03:40 2008
因為我想讓自製的滑鼠游標精確的追蹤滑鼠座標
所以我用framerate = 1000
我用Timer設定delay=1 , 或是onEnterFrame時,函數都設這樣:
var t:uint = 0;
function XX(e){
自製cursor.x = mouseX;
自製cursor.y = mouseY;
if(t==20){
emitter.step();
t=0;
}
t++;
}
我場景是用1024x768,可是只要用全螢幕,滑鼠游標移動很順,particle就超級lag....
然後我想說,可能是因為移動游標和粒子的程式放在一起的關係吧,所以我就分開成兩個
function,可是一樣會lag(無論這兩個function是不是皆由Timer或onEnterFrame呼叫)
後來又想說會不會是cacheAsBitmap或是粒子太多的問題,結果都不是
(就算粒子只有兩三個一樣會lag)
然後前幾天我有寫了一個PreciseTimer
用這個呼叫兩個函式分別控制滑鼠和粒子,lag情形減緩很多,我也不知道為什麼= =
其實這個Timer比較像是manager,用
addCall(name, startTime, endTime, function, times) 方法
[在startTime開始呼叫, endTime結束呼叫, 中間呼叫 times次 (呼叫function)]
時間設定都是用毫秒, name是讓你可以在之後remove
原理也是用內建Timer,不過delay=1
他會找到每個call在某個時間區間內呼叫function times次,傳給function一個百分比值
因為內建Timer不是準時的,所以我傳回百分比值是目前呼叫到哪裡了(這是精確的,誤差在
很複雜的function下才會lag 200毫秒左右, 除非有個迴圈很長,之前測試有到誤差1秒)
(相信大家都知道內建Timer實在是有夠不準的,誤差好幾十秒很平常= =)
我自己測試
addCall("test1",0,100000,testFun1, 40000)
addCall("test2",2300,6000,testFun2, 5000)
addCall("test3",60000,110000, testFun3, 200)
全部一起執行,場景甚麼都沒有,沒有複雜的函式
每次呼叫函式的誤差不會超過50毫秒(通常都是10毫秒內)
(重點是取得百分比值進行處理,不然呼叫函式的時間也有幾十毫秒的誤差)
不過還在開發中....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.99.60.201
→ Jerrynet:所以可以脫離1毫秒只能呼叫一次的限制.... 09/04 14:06
→ Jerrynet:不過還是不可能誤差0毫秒啦,接近而已 09/04 14:12
→ Jerrynet:更新檔案了,可以去下載來測試看看,不要線上看哦,會看不到 09/04 14:18
※ 編輯: Jerrynet 來自: 122.99.60.201 (09/04 14:19)
推 cjcat2266:如果是要精確追蹤滑鼠,用MouseEvent.MOUSE_MOVE 09/05 02:14
→ cjcat2266:和MosueEvent.updateAfterEvent()不是比較方便嗎? 09/05 02:14
→ cjcat2266:還有你新的檔案有 "甩粒子" 唷~酷 :p 09/05 02:15
→ Jerrynet:咦~ 好像是耶,居然忘了= = 09/05 11:06