Cocos Creator游戲開發中實現多指觸控縮放代碼及原理解析


一、 UI設計

如上圖,我們設計一個簡單的界面來進行測試。新建OnMultiTouchCtrl.js ,掛載到OnMultiTouchCtrl節點上。

二、 OnMultiTouchCtrl.js實現如下             推薦一個學習交流群:1072209430

首先在方法中,給Canvas節點添加觸摸移動的監聽事件,在其回調方法中打印event得到結果如下:

由此,我們可以猜測_touches得到的就是多點觸摸的信息。故可以通過event.getTouches()方法獲取多點觸控的信息。

三、 OnMultiTouchCtrl.js代碼如下

四、 縮放算法原理解析

我們首先考慮觸摸的兩點構成的向量偏水平的情況,也就是代碼中Math.abs(distance.x) > Math.abs(distance.y)的情況。這種情況能夠理解,偏垂直的情況就是一樣的操作原理。

1. 放大

我們首先來看放大的情況,為了便於大家理解,我們假設其中一個觸摸點不動(觸摸點O不動),另一個觸摸點動(A動)。如下圖,touchPoint2為觸摸點O,touchPoint1為觸摸點A,則distance為向量OA。

假設觸摸點A由A移動到B,觸摸點O不動。則delta1=向量AB,delta2等於零向量。delta=delta1=向量AB。

如上圖所示,由於假設的是偏水平向量,所以滿足第一個分支。縮放的值scale就等於對象原來的縮放值乘以一個比例系數。這個比例系數就是線段OE的長比線段OD的長。也就是(distance.x + delta.x)/distance.x。

如果圖片原來的對角線是OA,則縮放后圖片的對角線就是OB。完美!

接下來縮小就是一樣的道理了。

2. 縮小

縮小時,假設其中一個觸摸點O不動,另一個觸摸點由A點移動到B’點。如下圖所示。此時向量delta=向量AB’。其delta.x為負數,distance.x+delta.x的值為線段OF的長度。所以,如果圖片原來對角線是OA,縮放后,對角線會變成OB’。正確!

至於,偏垂直的向量情況,也就可以照葫蘆畫瓢了,所以上述代碼就很好搞定了 。

五、 打包測試

1. 打包成微信小游戲

打包完成后,點擊上圖的【打開】找到導包好的項目路徑,然后打開微信開發者工具,導入如下:

2. 微信開發者工具+手機測試

點擊預覽,生成二維碼,打開手機微信,掃一掃,測試,雙指觸摸,張開放大圖片,收攏縮小圖片,測試效果如下:

所以,想使用“九陰白骨爪”切水果的朋友,應該知道如何寫你的代碼了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM