我創造了一個類使用SKSpriteNode作爲一個按鈕前一段。你可以在GitHub上找到它。
AGSpriteButton
它的實現是基於UIButton的,所以如果你已經熟悉了iOS上,你會發現它易於使用。
它包括設置一個標籤,以及一種方法。
A鍵通常會宣稱,像這樣:
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)
您必須使用touchesBegan/Ended,否則您將獲得觸摸輸入嗎?這樣做的一個方法:https://github.com/KoboldKit/KoboldKit/blob/master/KoboldKit/KoboldKitFree/Framework/Behaviors/UserInterface/KKButtonBehavior.m – LearnCocos2D
我的切換按鈕,例如http://stackoverflow.com/questions/ 19688451/how-to-make-a-toggle-button-on-spritekit/19694729#19694729 – DogCoffee
在didMoveToView中添加UIButton對你來說有什麼不好?如果顯示比場景加載稍後一點,請嘗試設置「pausesIncomingScene」或SKTransition,以用於顯示SKScene..I personaly,使用帶觸摸的SKSpriteNode開始方法... – BSevo