Re: [問題] 請問Flash Player 的 使用硬體加速...

看板Flash作者 (聖石小子)時間17年前 (2008/09/04 14:03), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串2/2 (看更多)
因為我想讓自製的滑鼠游標精確的追蹤滑鼠座標 所以我用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

09/04 14:06, , 1F
所以可以脫離1毫秒只能呼叫一次的限制....
09/04 14:06, 1F

09/04 14:12, , 2F
不過還是不可能誤差0毫秒啦,接近而已
09/04 14:12, 2F

09/04 14:18, , 3F
更新檔案了,可以去下載來測試看看,不要線上看哦,會看不到
09/04 14:18, 3F
※ 編輯: Jerrynet 來自: 122.99.60.201 (09/04 14:19)

09/05 02:14, , 4F
如果是要精確追蹤滑鼠,用MouseEvent.MOUSE_MOVE
09/05 02:14, 4F

09/05 02:14, , 5F
和MosueEvent.updateAfterEvent()不是比較方便嗎?
09/05 02:14, 5F

09/05 02:15, , 6F
還有你新的檔案有 "甩粒子" 唷~酷 :p
09/05 02:15, 6F

09/05 11:06, , 7F
咦~ 好像是耶,居然忘了= =
09/05 11:06, 7F
文章代碼(AID): #18lte-Kg (Flash)
文章代碼(AID): #18lte-Kg (Flash)