屏幕交互事件未注册

时间:2016-06-24 19:07:41

标签: ios sprite-kit swift2 xcode7.3

我的主菜单有一个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: "")
  }

}

0 个答案:

没有答案