我之前创建了一个使用SKSpriteNode作为按钮的类。你可以在GitHub上找到它。
AGSpriteButton
它的实现基于UIButton,所以如果你已经熟悉iOS,你应该会觉得很容易使用。
它还包括一个设置标签的方法。
一个按钮通常会这样声明:
AGSpriteButton *button = [AGSpriteButton buttonWithColor:[UIColor redColor] andSize:CGSizeMake(300, 100)]
[button setLabelWithText:@"Button Text" andFont:nil withColor:nil]
button.position = CGPointMake(self.size.width / 2, self.size.height / 3)
[button addTarget:self selector:@selector(someSelector) withObject:nil forControlEvent:AGButtonControlEventTouchUpInside]
[self addChild:button]
就是这样,你可以开始使用了。
编辑:自发布此答案以来,对AGSpriteButton进行了一些增强。
现在,您可以将块分配给触摸事件执行:
[button performBlock:^{
[self addSpaceshipAtPoint:[NSValue valueWithCGPoint:CGPointMake(100, 100)]];
} onEvent:AGButtonControlEventTouchUp];
此外,可以为 SKNode 的实例(或其任何子类)分配要执行的 SKAction 对象:
[button addTarget:self
selector:@selector(addSpaceshipAtPoint:)
withObject:[NSValue valueWithCGPoint:CGPointMake(self.size.width / 2, self.size.height / 2)]
forControlEvent:AGButtonControlEventTouchUpInside];
AGSpriteButton同样可以与Swift一起使用!
let button = AGSpriteButton(color: UIColor.greenColor(), andSize: CGSize(width: 200, height: 60))
button.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
button.addTarget(self, selector: "addSpaceship", withObject: nil, forControlEvent:AGButtonControlEvent.TouchUpInside)
button.setLabelWithText("Spaceship", andFont: nil, withColor: UIColor.blackColor())
addChild(button)