tvOS SpriteKit 应用程序中的菜单按钮

Posted

技术标签:

【中文标题】tvOS SpriteKit 应用程序中的菜单按钮【英文标题】:Menu buttons in tvOS SpriteKit app 【发布时间】:2016-04-06 19:26:27 【问题描述】:

我不知道如何以 tvOS 方式制作菜单按钮。我知道 UIKit 按钮如何聚焦的新方式,但它们之间的导航是在幕后完成的。在 SpriteKit 中没有 FocusEngine 支持,所以这是我的问题,请你们给个提示或代码 sn-p(最好是 swift)如何创建 SKSpriteNode 按钮以及如何实现它以便它可以像按钮一样工作?

谢谢

【问题讨论】:

【参考方案1】:

我不确定这是否是最好的方法,但它适用于我和我的 tvOS 游戏。我使用了手势识别器,并使用左右滑动来更改我的 SKSpriteNode 纹理。这会产生选定/取消选定按钮的效果。比我简单地使用 bool 类型的变量 buttonSelected 并在按钮纹理更改时更新它。比我使用这个变量来决定点击遥控器后应该执行哪个动作。这是通过 buttonAction 函数中的简单 if 语句完成的。我希望这能帮到您。我对 swift 还是很陌生,所以我希望我能清楚地描述它。

class GameScene: SKScene 

var button = SKSpriteNode(imageNamed: "button.png")
var buttonSelected = false

var button2 = SKSpriteNode(imageNamed: "button2.png")
var button2Selected = false

override func didMoveToView(view: SKView) 

    button.position = CGPoint(x: 900, y:100)
    self.addChild(button)

    button2.position = CGPoint(x: 1700, y:100)
    self.addChild(button2)

    // gesture recognizer

    let swipeRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameOverScene.swipedRight(_:)))
    swipeRight.direction = .Right
    view.addGestureRecognizer(swipeRight)

    let swipeLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameOverScene.swipedLeft(_:)))
    swipeLeft.direction = .Left
    view.addGestureRecognizer(swipeLeft)

    let tapGeneralSelection = UITapGestureRecognizer()
    tapGeneralSelection.addTarget(self, action: #selector(GameScene.buttonAction))
    tapGeneralSelection.allowedPressTypes = [NSNumber (integer: UIPressType.Select.rawValue)]
    self.view!.addGestureRecognizer(tapGeneralSelection)


func swipedRight(sender:UISwipeGestureRecognizer)

    let buttonTexture1 = SKTexture(imageNamed: "button2Selected.png")
    button2.runAction(SKAction.setTexture(buttonTexture1))
    button2Selected = true

    let buttonTexture2 = SKTexture(imageNamed: "button.png")
    button.runAction(SKAction.setTexture(buttonTexture2))
    buttonSelected = false


func swipedLeft(sender:UISwipeGestureRecognizer)

    let buttonTexture1 = SKTexture(imageNamed: "buttonSelected.png")
    button.runAction(SKAction.setTexture(buttonTexture1))
    buttonSelected = true

    let buttonTexture2 = SKTexture(imageNamed: "button2.png")
    button2.runAction(SKAction.setTexture(buttonTexture2))
    button2Selected = false


func buttonAction() 

    if( buttonSelected == true) 
        // do something after button is pressed
     else if (button2Selected == true) 
       // do something after button2 is pressed
  

【讨论】:

以上是关于tvOS SpriteKit 应用程序中的菜单按钮的主要内容,如果未能解决你的问题,请参考以下文章

TVOS 10 SpriteKit 焦点导航默认焦点项目

播放器控制器在 tvOS 中按下菜单按钮时关闭

如何在不破坏“菜单”按钮默认行为的情况下在 tvOS 游戏中设置主菜单

tvOS 中的一种方式 Segue

tvos swift spritekit - UITapGestureRecognizer 没有响应

如何设置主菜单中tvOS比赛没有打破“菜单”键默认行为