序言
最近由于寫多了業(yè)務(wù)邏輯的軟件,讓人很煩悶啊。
打算找點(diǎn)有意思的東西來研究下。
就這樣,我開始了SpriteKit 的深坑之旅。
國內(nèi)SpriteKit 的資料真的是少之又少,遇到了很多問題,英語渣實(shí)在是很難受。但是一旦入手,感覺真的還是不錯的。
那用這個做swift 游戲避免不了角色移動吧,移動就會需要虛擬搖桿。那如何實(shí)現(xiàn)呢?
基本介紹
1.節(jié)點(diǎn)
? ? ?熟悉JS的同學(xué)應(yīng)該很了解節(jié)點(diǎn)這個東西,Node,在SpriteKit里面為SKNode,概念和JS類同,不多做解釋
2.精靈
? ? ?在一個游戲場景中,幾乎所有的內(nèi)容都是由圖像實(shí)現(xiàn)的,如游戲背景,敵人,玩家,每一個圖像都被稱為一個精靈。
我放棄了,東西太多了,介紹完的話,都要寫本書了,以下內(nèi)容面向有基礎(chǔ)的童鞋
展示下Demo吧

如何達(dá)到這種效果
別著急,我們先來看看原理
將GameScene中的場景修改尺寸,將錨點(diǎn)定位(0,0)
如此生成一個圓,一個原點(diǎn),錨點(diǎn)皆為(100,100)

詳細(xì)坐標(biāo)圖

大致思路講解
你們可能會覺得這個三角形要來干嘛?別著急,我用最簡單的語言來解釋一下。
想要移動中心點(diǎn)A,我們會調(diào)用touchMove這個方法,這樣才能在你滑動的時候,獲得你的觸點(diǎn)Position,再獎中心點(diǎn)A的Position設(shè)置為觸點(diǎn)的Position即可將A實(shí)施移動。
現(xiàn)在我們有兩種情況
第一種 :觸點(diǎn)在紅色圓里面移動
假設(shè)半徑為50的情況下,我們只需要判斷觸點(diǎn)距離圓心的距離,是否小于50,就可判定觸點(diǎn)是否在紅圓之內(nèi)
第二種:觸點(diǎn)在紅色圈外面
這種情況下,顯然我們不能將中心點(diǎn)A移出紅圈,我們需要將它沿著你的手指方向停在圓邊上,這是關(guān)鍵點(diǎn)。這時候我們就需要利用這個三角形了。由上可知,我們可以通過方法獲取觸點(diǎn)的坐標(biāo)。現(xiàn)在我們假設(shè)F為你的觸點(diǎn)。 由此可知:
AF^2 = AC^2 + FC^2
AF/FC = AD/DB ?=> DB = (AD * FC)/AF
AF/AC = AD/AB ?=> AB = (AD * AC)/AF
將中心點(diǎn)設(shè)置為(AB,DB),就將它沿著你的手指方向停在圓邊上了。
為什么需要這么做呢,有人可能說多此一舉,經(jīng)過本人測試,如果不這樣判斷,你在外面移動觸點(diǎn)時,中心點(diǎn)不會跟隨你的手指,會造成卡頓的感覺。這樣的邏輯保證了,你的手指在圓外面也會跟隨你的觸點(diǎn)移動。
源代碼
方便起見就直接上圖片了,防止懶人直接復(fù)制黏貼
初始化界面

設(shè)置移動算法實(shí)現(xiàn)

到此,搖桿已經(jīng)實(shí)現(xiàn),配合其他精靈,就能做出多種多樣的游戲啦
ps:(靈感來自于i.she.vc/yuanchuang/590880.html?)
國內(nèi)資料太少,有不足之處還望指出