作者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
1F:→ Jerrynet:所以可以脱离1毫秒只能呼叫一次的限制.... 09/04 14:06
2F:→ Jerrynet:不过还是不可能误差0毫秒啦,接近而已 09/04 14:12
3F:→ Jerrynet:更新档案了,可以去下载来测试看看,不要线上看哦,会看不到 09/04 14:18
※ 编辑: Jerrynet 来自: 122.99.60.201 (09/04 14:19)
4F:推 cjcat2266:如果是要精确追踪滑鼠,用MouseEvent.MOUSE_MOVE 09/05 02:14
5F:→ cjcat2266:和MosueEvent.updateAfterEvent()不是比较方便吗? 09/05 02:14
6F:→ cjcat2266:还有你新的档案有 "甩粒子" 唷~酷 :p 09/05 02:15
7F:→ Jerrynet:咦~ 好像是耶,居然忘了= = 09/05 11:06