2016-03-22 6 views
0

В моем предыдущем приложении (приложение с одним представлением) я использовал touch down и касался кнопок IBActions для моей игры. Однако в игре SpriteKit вам нужно полностью создать сцену, и мне сложно программировать мой метод touchesBegan.как код UIbuttons/IBactions в методах касания для набора комплекта спрайтов

Вот мой основной метод движения/функция:

func heroMovementLeft() { 

    hero.position = CGPointMake(hero.position.x - 0.5,hero.position.y); 

} 

вот моя левая стрелка узел, я хотел бы метод HeroMovementLeft называться при прикосновении к LeftArrow

func LeftArrow() { 

    let LeftArrow = SKSpriteNode(imageNamed: "Left Arrow.png") 
    LeftArrow.position = CGPointMake(30, 30) 
    self.addChild(LeftArrow) 
} 

Вот где я am в настоящее время для кодирования метода touchesBegan

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     /* Called when a touch begins */ 

     for touch in touches { 
     } 
} 

Создать оператор if? Я могу коснуться переменной? Что мне нужно написать в моих прикосновениях, начал метод, чтобы мой герой двигался при касании левой стрелки. Я просмотрел онлайн и не могу найти ответ на этот вопрос, пожалуйста, помогите.

+1

Возможный дубликат [Настройка кнопок в SKScene] (http://stackoverflow.com/questions/19082202/setting-up-buttons-in-skscene) –

+0

Есть несколько способов пойти. Простейшим было бы дать имя узлу, который вы хотите переместить, и в методе touchhesBegan используйте 'nodeAtPoint', чтобы увидеть« если вы касаетесь правильного узла »... – Whirlwind

ответ

1

Вы в основном есть 2 варианта для определения ваших спрайтов

1) делают их глобальные свойства на сцене

class YourScene: SKScene { 

    var leftArrow: SKSpriteNode! 

    override func didMoveToView(view: SKView) { 

    } 


    func leftArrow() { 

     leftArrow = SKSpriteNode(imageNamed: "Left Arrow.png") 
     leftArrow.position = CGPointMake(30, 30) 
     addChild(leftArrow) 
    } 
} 

чем в касаний начали вы можете получить место, как так

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    /* Called when a touch begins */ 

    for touch in touches { 
     let location = touch.locationInNode(self) 
     let node = nodeAtPoint(location) 

     if node == leftArrow { 
      heroMovementLeft() 
     } 
     } 
    } 

Вариант 2 - дать свои спрайты

func leftArrow() { 
    let leftArrow = SKSpriteNode(...) 
    leftArrow.name = "LeftArrow" 
    ... 
} 

и чем чек на эти имена в штрихах стал методом

.... 
    if node.name == "LeftArrow" { 
    heroMovementLeft() 
    } 

В качестве примечания, вы должны начать свои свойства или FUNC с маленькими буквами и только начинаете классы, структуру и протоколы с прописными буквами.

+0

Спасибо за помощь @ crachoveride777 Я больше не получать уведомления об ошибках, но когда я запускаю приложение в симуляторе, стрелка не отображается на экране. Я пробовал несколько разных CGpoint. Может ли это быть потому, что я не выполнил код addChild (leftArrow) в моем переопределении func didMoveToView (view: SKView) } ??? –

+0

Вам всегда нужно вызвать addChild (YourSprite), чтобы добавить его в сцену. – crashoverride777

+0

Я не думаю, что это не имеет ничего общего с вопросом, который вы задали. У вас есть другие изображения, такие как фоновые спрайты, которые могут его покрыть. Попробуйте дать стрелке zPosition выше, чем ваш фоновый спрайт, если он у вас есть. – crashoverride777