2017-02-22 3 views
0

Я пытаюсь создать меню для своей игры, но мои кнопки Ui не добавляют в сцену, может ли кто-нибудь увидеть, что я делаю неправильно здесь? Я знаю, что проблема очевидна, и я просто скучаю по ней. AM я добавляю их на сцену неправильно? Или есть что-то я забыл определитьUi button, не добавляющий в SkScene

import Foundation 
import SpriteKit 

var nextLevelButton = UIButton() 

var previousLevelButton = UIButton() 

var easyText = SKSpriteNode(imageNamed: "RzLsEasyText.png") 
var easyButtonActive = true 
var easyButton = UIButton() 

var mediumText = SKSpriteNode(imageNamed: "RzLsMediumText.png") 
var mediumButtonActive = false 
var mediumButton = UIButton() 

var hardText = SKSpriteNode(imageNamed: "RzLsHardText.png") 
var hardButtonActive = false 
var hardButton = UIButton() 

var nightmareText = SKSpriteNode(imageNamed: "RzLsNightmareText.png") 
var nightmareButtonActive = false 
var nightmareButton = UIButton() 

class LevelSelect: SKScene { 

override func didMoveToView(view: SKView) { 

    self.scene?.size = CGSize(width: 1136, height: 640) 

    easyText.position = CGPointMake(980.865, 394) 
    easyText.zPosition = 6 
    easyButton = UIButton(frame: CGRectMake(974, 240, 100, 64)) 
    easyButton.addTarget(self, action: "EasyButtonActive", 
    forControlEvents: UIControlEvents.TouchUpInside) 

    mediumText.position = CGPointMake(985.603, 338) 
    mediumText.zPosition = 5 
    mediumButton = UIButton(frame: CGRectMake(974, 240, 178, 64)) 
    mediumButton.addTarget(self, action: "MediumButtonActive", 
    forControlEvents: UIControlEvents.TouchUpInside) 

    hardText.position = CGPointMake(981.833, 292) 
    hardText.zPosition = 5 
    hardButton = UIButton(frame: CGRectMake(974, 240, 105, 56)) 
    hardButton.addTarget(self, action: "HardButtonActive", 
    forControlEvents: UIControlEvents.TouchUpInside) 

    nightmareText.position = CGPointMake(984.116, 237) 
    nightmareText.zPosition = 5 

    goBackButton = UIButton(frame: CGRectMake(137.214, 570, 183, 91)) 
    goBackButton.addTarget(self, action: "GoBack", forControlEvents: 
    UIControlEvents.TouchUpInside) 

    previousLevelButton = UIButton(frame: CGRectMake(468.358, 513, 
    62.173, 89)) 
    previousLevelButton.addTarget(self, action: "MissionDown", 
    forControlEvents: UIControlEvents.TouchUpInside) 

    nextLevelButton = UIButton(frame: CGRectMake(667.928, 515.508, 600, 
    600)) 
    nextLevelButton.backgroundColor = UIColor.blueColor() 
    nextLevelButton.addTarget(self, action: "MissionUp", 
    forControlEvents: UIControlEvents.TouchUpInside) 

    self.addChild(levelSelectBackground) 
    self.addChild(easyText) 
    self.addChild(mediumText) 
    self.addChild(hardText) 
    self.addChild(nightmareText) 
    self.addChild(proceedLabel) 
    self.addChild(survivalText) 
    self.addChild(challangeText) 
    self.addChild(LevelScenePreview) 
    self.addChild(levelNumber) 

    self.view!.addSubview(survivalButton) 
    self.view!.addSubview(challangeButton) 
    self.view!.addSubview(proceedButton) 
    self.view!.addSubview(goBackButton) 
    self.view!.addSubview(goBackButton) 
    self.view!.addSubview(easyButton) 
    self.view!.addSubview(mediumButton) 
    self.view!.addSubview(hardButton) 
    self.view!.addSubview(nextLevelButton) 
    self.view!.addSubview(previousLevelButton) 
     } 
+0

вы пробовали возиться с zPositions? – sicvayne

+0

@sicvayne Кнопки Ui не имеют позиции z только SkNodes do –

ответ

2

я предлагаю, что вы не должны использовать UIButton с или любой вид в UIKit в SKView. Они просто не вписываются в хорошо. Они используют другое координатное пространство от узлов спрайтов, и они не являются частью дерева узлов. Они все еще работают, когда сцена paused ... Это просто беспорядок.

Вместо этого вы должны создать SKSpriteNode s. Создайте текстуры кнопок и поместите их на SKSpriteNode s. Переопределите методы touchesBegan и touchesEnded для обнаружения ответвлений. Если у вас много кнопок, вы должны добавить подкласс SKSpriteNode.

Я написал подкласс для вас:

class ButtonNode: SKSpriteNode { 
    override init(texture: SKTexture?, color: UIColor, size: CGSize) { 
     super.init(texture: texture, color: color, size: size) 
     isUserInteractionEnabled = true 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     isUserInteractionEnabled = true 
    } 

    var onClick: (() -> Void)? 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     onClick?() 
    } 
} 
Смежные вопросы