cocos2dx 實現gallery (五)
阿新 • • 發佈:2019-01-23
boss還想實現一個自動滾的效果,就是我手指一下快速的劃過,不是慢慢拖動,然後這個滾滾會自己滾一段時間,再慢慢停下。
首先需要判斷這個東西,是劃過還是拖動。直接取按下的時間和鬆開的時間的差值,小於eps就算是劃過,按自動滾處理,不然就按之前的拖動處理,我取的是0.5秒
然後怎麼模擬這個滾一滾的慢慢停這個效果。。。我們還是來說物理吧。。。
把整個過程分為2段,一段是加速,一段是減速。
一開始滾輪靜止,受到作用力,加速。然後作用力消失,受到阻力作用,減速。
加速的時候,假設是一個勻加速運動。這一段時間的位移和時間,我們是可以獲取的。通過下面,可以求得瞬時速度。
s = 0.5*a*t^2 ---- s已知,t已知
v = at ---- a上面算出
減速這一段,假設這是一個勻減速運動。阻力恆定,那麼加速度就恆定。但是這個加速度怎麼取呢?我是測試了幾次自己取了個值。因為我希望輕輕撥動一下,滾動的時間,大概是在1秒多這麼一個範圍。通過 v= at ,可以大概求出一個a,再根據實際效果,稍微調整一下。
知道觸控停止以後,還會滾多久,就方便了。啟動一個定時器:
上面這個,簡單的就是,每個定時器週期內,算一個瞬時速度,然後算這個瞬時速度在一個週期內的位移,然後叫滾滾動那麼個距離。因為回撥很頻繁,這樣看上去效果已經不錯了。local schedulerFunc = function(dt) dt = dt *1000 -- s to ms timeLeft = timeLeft - dt local velocity = acc*timeLeft local path = velocity*dt*direction if timeLeft <= 0 then scheduler.unscheduleGlobal(self.scrollHandler) self:move(path,true) else self:move(path) end end self.scrollHandler = scheduler.scheduleGlobal(schedulerFunc, 0.01)