2015-04-04 2 views
1

Я создал раскадровку и добавил сцену с двумя кнопками. Я не могу понять, как узнать, когда нажата кнопка в классе GameScene.swift.Обнаружение при нажатии кнопки в SKScene?

Как это можно сделать?

enter image description here

+0

Вы можете использовать такой компонент, как https://github.com/akashgupta88/AGSpriteButton. Он позволяет выполнять операции для различных событий касания. – ZeMoon

+1

Являются ли эти фактические uibuttons или узлы, которые вы используете в качестве кнопок – hamobi

ответ

1

Вы, кажется, смешиваете UIKit и SpriteKit здесь. Я лично посоветовал бы использовать UIButtons в сочетании с Sprite Kit. Есть ли конкретная причина для этого?

Есть два способа можно реализовать поведение кнопки внутри Sprite Kit сцены:

  1. есть объект SKScene обрабатывать штрихи
  2. есть кнопка сама ручки прикасается

ответа Dharmesh в использует метод (1), где он реализует метод -touchesBegan. В моем текущем проекте я использую подкласс SKNode в качестве кнопки (2). Я не знаком с синтаксисом Swift, поэтому вместо этого разместил код Objective-C из моего проекта. Вызов метода аналогичен, хотя и должен помочь проиллюстрировать суть.

Если вы хотите, чтобы SKNode получил штрихи, установите userInteractionEnabled в YES. В противном случае ближайший предок с userInteractionEnabled = YES (который обычно представляет собой SKScene) получит сообщение -touchesBegan/-touchesMoved/-touchesEnded.

@interface VTObject : SKNode 

@end 

... 

@implementation VTObject 

- (instancetype)init {  
    if (self = [super init]) { 
    self.userInteractionEnabled = YES; 
    } 

    return self; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    NSLog(@"button touched!"); 
} 

@end 
3

Вы можете touchesBegan вам для этого.

Вот пример кода для вас:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

    for touch: AnyObject in touches{ 
     let location = touch.locationInNode(self) 
     if self.nodeAtPoint(location) == self.playButton{ 

       //your code 
     } 
    } 
} 
0

Вы должны добавить UIButton программно, а не в IB, к SKScene «s SKViewdidMoveToView, например). Затем вы можете установить цель для кнопки с button.addTarget:action:forControlEvents:. Просто не забудьте позвонить button.removeFromSuperview() в willMoveFromView, иначе вы увидите кнопки в следующей сцене.

Смежные вопросы