搖桿控制方向原理 用Vue實現乙個街機遊戲搖桿

2021-10-13 22:14:19 字數 2784 閱讀 7663

印象裡我在不同時期曾經用三種語言分別實現過這個案例。所以無論用什麼框架、語言,只要你了解背後的原理,都很容易實現。

全部ui分為三層

當然沒有第二層和第三層是不影響搖桿功能的,但誰叫我是乙個擬物流的前端偏執狂呢?

把這三個層通過絕對定位+z-index疊起來,通過設定touch事件讓桿頭可以拖動。為了讓大家看得清楚層級,我們先把桿頭變透明。

搖桿嘛,圓形的洞裡有根桿(不要呀),所以我們必須把拖拽限制在乙個圓形區域裡

ontouchmove(e)

**中比較核心的部分是:我們先通過所在點原點位置求出半徑distance,以及之間的夾角角度angle。然後通過限定半徑和夾角角度還原出xy的座標。就可以達到控制拖動在圓形區域內的效果了。

//獲取兩點間直線距離的演算法

var getdistance=function(x1, y1, x2, y2) 

杆體是這裡面最麻煩的一塊,需要通過搖桿的拖拽的距離變化長度,同時根據搖桿的位置旋轉角度。

slot>

view>

view>

夾角轉為旋轉角度演算法angle/(3.14159/180),減去90是為了讓度數起點在12點鐘的位置。

現在搖桿ue基本就完成了,接下來我們要輸出一些數值,畢竟搖桿不能光自己,得用來控制其他的元素進行運動。

方向我們在杆體運動的時候,已經寫完了,就是那個角度angle

power = 當前半徑/最大半徑;

搖桿力度這件事在拳皇裡是不存在的,但是在很多遊戲中分輕推重推(其實就是搖桿當前距離和最大距離的比),比如輕推是走,重推是跑。

gif有點掉幀,大家能看出來運動的快慢嗎?

現在把上面的成果封裝成乙個vue元件,方便復用。

view>

view>

view>

ezjoystick>

touchradius觸控檢測的實際半徑

ballmoveradius桿頭的最大移動範圍半徑

transition是否開啟緩動回位

三個slot

三個slot都是非必須的,不填的話,該部分就是空dom。具體可參考原始碼。

ball桿頭

stick杆體

bottom

兩個事件

onjoystickupdate有數值變化就會觸發

onjoystickcancel停止觸控時觸發

元件封裝好了,接下來用咱們這個元件實現幾個經典的介面吧

模擬十字鍵,核心是把角度轉成4個方向,這裡我隨手寫了一下,應該有更優雅的實現。

在外層關聯旋轉乙個箭頭而已...

clone原始碼後使用hbuilerx開啟可以快速看到例項,或將components複製到vuecli專案中匯入使用

用Vue實現乙個全選指令

下面為實現 全選 data function computed set function value return value 選中的數量 selectcount return i 選中的陣列 checkedgroups return checkedgroups 這種方法用起來不太方便,首先是很難復...

用Vue實現乙個登陸介面

最近由於一些原因,開始學習vue的專案開發,對於我這樣乙個剛剛入行的菜鳥級c 程式設計師,可真踩了不少坑,接下來,廢話少說。本人win10開發環境 資深大佬勿噴,我沒有mac,也沒有安裝linux環境 1.首先安裝node環境,本專案中主要是用來做包管理。傳送門 2.安裝vue 開啟控制台輸入,並等...

01 RPC簡介原理及用Go實現乙個RPC

rpc簡介 本地過程呼叫 正常情況下程式的執行和呼叫情況。例如有如下go語言 package main import fmt func main func add a int,b int int 在上述的go語言 中,我們定義了乙個add方法用於實現兩個數相加的功能,在main方法中通過呼叫add方...