我的主菜单有一个SGScene。 当用户选择“播放”(SKSpriteNode)时,事件永远不会被注册并且
覆盖func screenInteractionStarted(location:CGPoint){ 永远不会被称为。
这是我加载SKSprtiteNodes的didMoveToView ...
class MainMenu: SGScene {
// custom menu
// intilise sounds
let sndTitleDrop = SKAction.playSoundFileNamed("title_drop.wav", waitForCompletion: false);
let sndButtonClick = SKAction.playSoundFileNamed("button_click.wav", waitForCompletion: false);
override func didMoveToView(view: SKView) {
// when the view loads
// pos at center of screen and make bigger than scene x and yScale, and pos to back witg z
let background = SKSpriteNode(imageNamed: "BG");
background.posByCanvas(0.5, y: 0.5);
background.xScale = 1.2;
background.yScale = 1.2;
background.zPosition = -1; // pos to the back
self.addChild(background);
// Play Button/Label
let playButton = SKLabelNode(fontNamed: "MarkerFelt-Wide");
playButton.posByScreen(0.5, y: 0.3);
playButton.fontSize = 56;
playButton.text = lt("Enter"); // update our loacilsed string file
playButton.fontColor = SKColor.whiteColor();
playButton.zPosition = 10; // pos to front
playButton.name = "playGame";
addChild(playButton);
响应者处理程序:
override func screenInteractionStarted(location: CGPoint) {
// handle responders
for node in nodesAtPoint(location){
// get all nodes descedning form this point
if node.isKindOfClass(SKNode){
if node.name == "playGame"{
buttonEvent("buttonA", velocity: 1.0, pushedOn: true);
print("Play button touched")
}
#if os(OSX)
if node.name == "exitGame"{
self.runAction(sndButtonClick);
NSApplication.sharedApplication().terminate(self);
}
#endif
}
}
}
任何意见都赞赏。
更新: SGScene是一个继承自SKScene的自定义util类,允许处理触摸//跨平台的按键 - 包括在这里
/**
Simplifies handling touches / key presses in a cross platform environment.
Adds camera functionality.
*/
class SGScene: SKScene {
//MARK: Public functions expected to be overridden
func screenInteractionStarted(location: CGPoint) {
/* Overridden by Subclass */
}
func screenInteractionMoved(location: CGPoint) {
/* Overridden by Subclass */
}
func screenInteractionEnded(location: CGPoint) {
/* Overridden by Subclass */
}
func buttonEvent(event:String,velocity:Float,pushedOn:Bool) {
/* Overridden by Subclass */
}
func stickEvent(event:String,point:CGPoint) {
/* Overridden by Subclass */
}
//MARK: Camera functionality
func centerCameraOnPoint(point: CGPoint) {
if let camera = camera {
camera.position = point
}
}
//MARK: Localization
func lt(text:String) -> String {
return NSLocalizedString(text, comment: "")
}
}