拇指投籃 ! Cocos Creator 3D

你的命中率是多少呢?

拇指投籃  !  Cocos Creator 3D


效果預覽

拇指投籃  !  Cocos Creator 3D


配置環境:

Cocos Creator 3D v1.0.1


玩法說明:

觸摸屏幕,向上滑動投籃!注意籃板是會移動的哦!看看你的命中率是多少!


實現原理

為了能達到好的投籃效果,在網上找了一個投籃機參數,大致按照實際參數設置籃框大小,球的大小,以及籃框的位置。

拇指投籃  !  Cocos Creator 3D


碰撞器:

籃板直接使用 盒碰撞器組件(BoxColliderComponent),籃球使用的是 球碰撞器組件(SphereColliderComponent)。

拇指投籃  !  Cocos Creator 3D

拇指投籃  !  Cocos Creator 3D

因為沒有 圓環碰撞器組件,所以對於籃球框用了多個 球碰撞器組件 實現碰撞檢測。

拇指投籃  !  Cocos Creator 3D


小球軌跡:

由於完全採用了物理引擎計算,要讓小球軌跡如我們所預期一樣,得遵循物理原理。這裡需要的知識是 位移與加速度、速度、時間的關係。

拇指投籃  !  Cocos Creator 3D

我們可以分為三個方向來考慮,需要計算初始速度 V_z 和 V_y 。在 Z 軸方向可以看作勻速運動,Y 軸方向為勻加速運動。其中 Z 軸 和 Y 軸 的位移我們已經設定好了,我們只需要設定拋球時間 t 就可以計算出初速度。注意 Y 軸的末速度要滿足與初速度相反,才能達到圖中拋物線的效果哦。參考計算方式如下:

const CONST_H = 1.25;
const CONST_S = 2.3;
const CONST_G = -10;
const CONST_T = 0.8;
const CONST_V_Z = CONST_S / CONST_T;
const CONST_V_Y = CONST_H / CONST_T - CONST_G * CONST_T / 2;

初始速度 V_x 可以根據觸摸開始的位置 x 和觸摸結束的位置 x 的差值乘以一個係數來獲取。


進球判斷:

我是在籃球框下方添加一個碰撞器檢測。再通過分組和掩碼控制碰撞器的開關。發射前,打開碰撞檢查,投進時,關閉碰撞檢測,讓球往下掉。

拇指投籃  !  Cocos Creator 3D

只要以下條件為真就會進行碰撞檢測。

(GroupA & MaskB) && (GroupB & MaskA)

經測試發現,默認的 Mask 為 -1 (即每一位都是1),默認的 Group 為 1 。 所以只要將 MaskB 設置為 2 (即只有第二位為1,其餘為0 ) ,通過控制 GroupA 第二位可以控制碰撞器開關。參考代碼如下:

const PHY_GROUP = { Group1: 1 << 1}
// 設置籃框碰撞器mask
this.colliderComponent_goal.setMask(PHY_GROUP.Group1)
// 打開碰撞,設置球的group
this.colliderComponent_basketball.addGroup(PHY_GROUP.Group1)
// 關閉碰撞,設置球的group
this.colliderComponent_basketball.removeGroup(PHY_GROUP.Group1)


小結

小球軌跡通過基本的物理知識分析得出初始速度!得分判斷採用的是碰撞器檢測,並控制其檢測開關讓球繼續運動。如果你有更好的方法或想法,歡迎留言分享交流!


以上為白玉無冰使用 Cocos Creator 3D 開發"拇指投籃"項目的主要技術分享,歡迎關注[白玉無冰]公號,內有完整代碼和試玩鏈接。

更多精彩







拇指投籃  !  Cocos Creator 3D


分享到:


相關文章: