Unity簡易八方手勢判斷
有BUG的手勢......
邏輯參考網站
http://blog.happybean.tw/blog/2012/07/04/javascript-yi-liang-dian-zuo-biao-qiu-qi-jiao-du-yu-lian-xian-zhi-chui-zhi-xiang-liang-fang-xiang
#pragma strict// 宣告進入、離開觸控位置陣列var startPos : Vector2[];var endPos : Vector2[];// 公開變數 宣告手勢方向static var gesturesDir:Vector2 = Vector2.zero;// 設定觸控陣列長度為5function Start(){startPos = new Vector2[5];endPos = new Vector2[5];}function Update () {// 假使 觸控點大於1if (Input.touchCount > 0){// 進行迴圈判斷for (var h = 0; h < Input.touchCount;++h){// 將觸碰進入點座標放置相對應陣列if (Input.GetTouch(h).phase == TouchPhase.Began){startPos[h] = Input.GetTouch(h).position;}// 將觸碰離開點座標放置相對應陣列if (Input.GetTouch(h).phase == TouchPhase.Ended){endPos[h] = Input.GetTouch(h).position;GesturesCtrl(startPos[h],endPos[h]);}}}}function GesturesCtrl (startPoint:Vector2,endPoint:Vector2){var xDiff : float = endPoint.x - startPoint.x;var yDiff : float = endPoint.y - startPoint.y;var slope : float = Mathf.Abs(yDiff / xDiff);// 宣告 垂直 水平 布林,上、右為真var verticalBool:int; // 上 1 下 -1var horizontal:int; // 右 1 左 -1// 宣告 方向// 判斷水平方向,大於0則於上方1、小於0則為下方-1,否則可能水平移動0if (yDiff>0){verticalBool = 1;}else if(yDiff<0 p="">0>
verticalBool = -1;}else{verticalBool = 0;}// 判斷水平方向,大於0則於右方1、小於0則為左方-1,否則可能垂直移動0if (xDiff>0){horizontal = 1;}else if(xDiff<0 span=""> horizontal = -1;0>}else{horizontal = 0;}print(slope);// 假使 斜率 大於 2 則為 純 垂直方向if (slope>2){ gesturesDir.y = verticalBool;gesturesDir.x = 0;// 假使 斜率 小於 0.5 則為 純 水平方向}else if(slope<0 .5="" p="">0>
gesturesDir.x = horizontal;gesturesDir.y = 0;// 假使 [斜率 落於 2,0.5之間 則為斜向] 或 [傾斜角非90度(x相減不為零) 則為水平(機率低但發生則因yDiff判斷為0而成立為純水平方向,又已於xDiff判斷水平方向)]}else{gesturesDir.x = horizontal;gesturesDir.y = verticalBool;}print(gesturesDir);}
邏輯參考網站
http://blog.happybean.tw/blog/2012/07/04/javascript-yi-liang-dian-zuo-biao-qiu-qi-jiao-du-yu-lian-xian-zhi-chui-zhi-xiang-liang-fang-xiang
留言
張貼留言