Swift-SpriteKit框架 實(shí)現(xiàn)虛擬游戲搖桿

序言

最近由于寫多了業(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吧


Demo

如何達(dá)到這種效果

別著急,我們先來看看原理

將GameScene中的場景修改尺寸,將錨點(diǎn)定位(0,0)

如此生成一個圓,一個原點(diǎn),錨點(diǎn)皆為(100,100)

手機(jī)場景坐標(biāo)系

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


詳細(xì)錨點(diǎn)坐標(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)


設(shè)置移動

到此,搖桿已經(jīng)實(shí)現(xiàn),配合其他精靈,就能做出多種多樣的游戲啦

ps:(靈感來自于i.she.vc/yuanchuang/590880.html?)

國內(nèi)資料太少,有不足之處還望指出

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容