Cocos2d js中實現慣性滑動效果

2021-06-27 03:53:41 字數 1672 閱讀 5854

什麼是慣性滑動效果呢?我們經常在手機上看到一種效果,拖著手機螢幕滑動,把手放開後,螢幕仍會因為慣性而滑動一段距離,這就是一種慣性滑動效果。現在的工作是做遊戲研發,因此也少不了要實現這種效果,初步想了一下,有幾種方案,當然,效果不太相同。

方案如下:

方案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將會用來放置您遊戲中所有本地資源 指...