什麼是慣性滑動效果呢?我們經常在手機上看到一種效果,拖著手機螢幕滑動,把手放開後,螢幕仍會因為慣性而滑動一段距離,這就是一種慣性滑動效果。現在的工作是做遊戲研發,因此也少不了要實現這種效果,初步想了一下,有幾種方案,當然,效果不太相同。
方案如下:
方案1: 手放開後,讓螢幕固定滑動一段距離。(這種方案最為簡單,但是視覺上過於死板)
方案2: 預設乙個滑動時間t,手放開後,讓螢幕根據當前速度v乘以滑動時間t得到一段滑動距離s (s = v * t)。(這種方案較第 一種方法好多了,但是還是看得很不爽)
方案3: 預設乙個加速度a,手放開後,讓螢幕根據當前速度v做勻減速運動,直至速度為0。 (這種方案看上去最為舒服,有很明顯 的慣性效果)
那麼問題來了,具體怎麼做勻減速直線運動呢?
我們先推一下我們需要的公式,然後再**實現 。
已知手放開的時候的螢幕滑動速度v,以及我們預設的加速度a;
滑動時間t = v / a;
滑動距離s = v * t + a * t * t / 2;
萬事具備,只欠東風,接下來就開始coding吧。
假設開始滑動時,
螢幕開始滑動的時間是begantime,
螢幕開始滑動時觸控的位置是beganlocation,
螢幕結束滑動的時間是endedtime,
螢幕結束滑動觸控的位置是endedlocation,
場景移動的節點是moveroot,
預設的加速度是a,
程式中我們只做左右滑動處理,上下滑動可依此類推
示例**如下 :
var speed; // 螢幕結束滑動時的速度
var distance; // 螢幕慣性滑動的距離
var duration; // 螢幕慣性滑動需要的時間
var interval; // 螢幕開始觸控到結束觸控的時間間隔
var flag; // 螢幕向左或向右滑動的標誌: 1 表示向右滑動, -1 表示向左滑動
var moveby; // 動作moveby
flag = 1; // 預設是向右滑動
interval = (endedtime - begantime) / 1000; // 因為獲取的時間的單位是毫秒,所以需要除以1000轉化成秒
speed = (endedlocation.x - beganlocation.x) / interval; // 計算手放開時的速度
// 如果速度的值小於0,則說明是向左滑動
if (speed < 0)
// 因為速度有正負,所以計算滑動所需的時間時要對速度求絕對值
duration = math.abs(speed) / a;
// 求滑動距離,同理,需要求絕對值
distance = math.abs(speed) * interval - a * interval * interval / 2;
moveby = cc.moveby(duration, cc.p(distance * flag, 0));
// 讓場景移動的節點做勻減速運動運動到目標位置
moveroot.runaction(moveby.easing(cc.easeexponentialout())); // easeexponentialout的作用是讓目標動作緩慢中止
Cocos2d JS螢幕適配
有終端開發經驗的讀者應該對螢幕適配問題深感痛惡,因為這個世界實在有太多型別的手機和平板了,各種尺寸 首先,我們來認識三個術語 cocos2d js為我們提供的螢幕適配方法有如下幾種 1.自適應拉伸cc.resolutionpolicy.exact fit 該方案下,遊戲剛好鋪滿整個螢幕,但畫面的比例...
cocos2d js環境搭建
一 環境配置 1.安裝python2.7x版本 二 建立工程 mac版本 命令 setup.py 配置當前cocos2dx mac上的環境變數 windows版本 命令 cocos new 工程名 p 包名 l js cpp android d 工程儲存路徑 三 了解引擎或者工程的結構目錄 配置好基...
cocos2d JS 專案結構
初次建立並開啟乙個 cocos creator 專案後,您的專案資料夾將會包括以下結構 projectname 專案資料夾 assets library local settings temp project.json下面我們將會介紹每個資料夾的功能。assets將會用來放置您遊戲中所有本地資源 指...