我的游戏设置有背景,中间有一条道路,然后在顶部有一个显示得分和暂停按钮的栏。道路和背景的zPositon均为1。顶部zPosition的横条为4,暂停按钮zPosition亦为4。

道路和背景的代码。

    road.position = CGPoint(x: CGFloat(0), y: CGFloat(0))
    road.zPosition = 1
    road.name = roadName
    background.position = CGPoint(x: CGFloat(0), y: CGFloat(0))
    background.zPosition = 1
    background.name = backgroundName

    addChild(background)
    addChild(road)


顶部栏的代码。

    topBar = SKSpriteNode(color: .black, size: CGSize(width: screenWidth, height: CGFloat(150)))
    topBar.position = CGPoint(x: 0, y: (screenHeight/2) + topBar.size.height/2)
    topBar.zPosition = 4
    topBar.name = topBarName

    addChild(topBar)


暂停按钮的代码。

    pauseButton.position = CGPoint(x: (-topBar.size.width/2) + (pauseButton.size.width + (pauseButton.size.width/2)), y: 0)
    pauseButton.zPosition = 4
    pauseButton.name = pauseButtonName

    topBar.addChild(pauseButton)


在我的触摸开始功能中,我尝试在触摸位置搜索节点,但它仅返回道路和背景的名称。它甚至没有拾取topBar或暂停按钮。

for node in nodes
            {
                print(node.name)

                if node.name == pauseButtonName
                {
                    print("paused")
                }
            }


这将输出

Optional("Road")
Optional("Background")


我也尝试了这种方法,但是“ paused”从未返回。

 if pauseButton.contains(touch.location(in: self))
            {
                print("paused")
            }


我认为可能需要注意的是,顶部栏最初位于屏幕之外。开始游戏时,它将运行SKAction来移动屏幕上的条形图。

topBar.run(SKAction.moveTo(y: (screenHeight/2) - (topBar.size.height/2), duration: 0.5))


为什么我不能选择暂停按钮,如何解决?

最佳答案

我通过使用此代码解决了该问题。我没有在游戏场景中检查位置,而是在topBar中进行了检查。

if pauseButton.contains(touch.location(in: topBar))
{
    print("paused")
}

10-08 18:09