2017-04-21 77 views
0

我正在創建一個遊戲,在其中爲我的主菜單屏幕創建了一個用戶界面,並且我想要應用播放按鈕以顯示在下圖中顯示的播放按鈕上。我知道如何通過main.storyboard來完成它,但不知道如何在spritekit中。所以,當他們點擊播放按鈕時,它會轉到不同的場景,這是(GameScene)如何在Spritekit/Swift 3中的圖像上創建按鈕?

這裏是圖像。

enter image description here

回答

2

可以接近這兩種方式。您可以堅持使用SpriteKit並親自處理交互,或者將SpriteKitUIKit混合使用。在第一種情況下,你會繼承SKSpriteNode或創建一個子類SKNodeSKSpriteNode孩子

SKSpriteNode(imageNamed: "...") 

,並通過覆蓋touchesBegantouchesEnded函數處理用戶交互。或者你可以用代碼創建UIButton

UPDATE

決定做一個快速的通用實施SpriteKit按鈕。你可以嘗試here,但請記住它是一個快速的第一次提交:)

+0

是不是真的安全混搭'SpriteKit'和'UIKit'框架?會不錯... ;-) –

+0

它的種類取決於你的項目。它有時會導致問題添加'UIKit'元素,因爲它們出現在'SpriteKit'之上。但在某些情況下工作正常。 –

+0

在按鈕/ gui控件的情況下,將它們放在頂部並不是一個大問題。這實際上是你應該想要的。 – BadgerBadger

1

我不會爲你的場景有一個包含它的按鈕的單個圖像。這樣的可擴展性沒有餘地。我將創建這些按鈕作爲SKSpriteNode的子類,並將它們作爲對象添加到場景中。這樣,如果你移動按鈕,你不必重做你的背景圖像。 @ Konrad.bajtyngier在他的實現中走在了正確的道路上,我在所有遊戲中都使用了非常相似的東西(它成爲從遊戲到遊戲複製的不可缺少的對象)。他的實現使用閉包() - >()來執行這些操作,另外還有一個選項可以在你的子類中使用。

在子類中添加委託

protocol ButtonDelegate: NSObjectProtocol { 
    func buttonWasPressed(sender: Key) 
} 

weak var buttonDelegate: ButtonDelegate! 

,當您創建按鈕,只需添加它們場景按鈕的代表。

button.buttonDelegate = self 

然後在場景中添加buttonWasPressed func。這樣你就可以知道按下了哪個按鈕並相應地處理它,而不必擔心通過使用閉包來保留你的對象。

我不覺得有一種方法比另一種方法更好,但是您應該強烈考慮對您的按鈕進行分類,並從背景圖像中刪除按鈕背景。

請參閱我的答案和代碼在這裏的全部細節

Make touch-area for SKLabelNode bigger for small characters

+0

非常感謝。我會牢記在心。 – Jonathon

相關問題