Я создал раскадровку и добавил сцену с двумя кнопками. Я не могу понять, как узнать, когда нажата кнопка в классе GameScene.swift.Обнаружение при нажатии кнопки в SKScene?
Как это можно сделать?
Я создал раскадровку и добавил сцену с двумя кнопками. Я не могу понять, как узнать, когда нажата кнопка в классе GameScene.swift.Обнаружение при нажатии кнопки в SKScene?
Как это можно сделать?
Вы, кажется, смешиваете UIKit и SpriteKit здесь. Я лично посоветовал бы использовать UIButtons в сочетании с Sprite Kit. Есть ли конкретная причина для этого?
Есть два способа можно реализовать поведение кнопки внутри Sprite Kit сцены:
ответа 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
Вы можете 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
}
}
}
Вы должны добавить UIButton
программно, а не в IB, к SKScene
«s SKView
(в didMoveToView
, например). Затем вы можете установить цель для кнопки с button.addTarget:action:forControlEvents:
. Просто не забудьте позвонить button.removeFromSuperview()
в willMoveFromView
, иначе вы увидите кнопки в следующей сцене.
Вы можете использовать такой компонент, как https://github.com/akashgupta88/AGSpriteButton. Он позволяет выполнять операции для различных событий касания. – ZeMoon
Являются ли эти фактические uibuttons или узлы, которые вы используете в качестве кнопок – hamobi