【问题标题】:Xcode 7 SpriteKit Error with BlocksXcode 7 SpriteKit 错误与块
【发布时间】:2015-09-12 04:44:53
【问题描述】:

有人知道为什么这在 Xcode 7 GM 中不再起作用了吗?

我已经调试验证了,但是即使节点出现在场景中,它们也不再将触摸事件传递给父节点。

下面是一个完整的示例。如果您从“New Sprite Kit Game”中替换默认的 GameScene,您可以自己重现它。

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        let card = Card(imageNamed: "card_background_blank")
        card.name = "Card"
        let stack = Stack(imageNamed: "stack_background")
        stack.name = "Stack"
        addChild(stack)
        stack.addChild(card)
        card.position = CGPointMake(100,100)
        stack.zPosition = 1
        card.zPosition = 1
        stack.position = CGPointMake(506,428)
        card.userInteractionEnabled = false
        stack.userInteractionEnabled = true
    }
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("Touch")
        moveAllCardsAndReturn()
    }
    func moveAllCardsAndReturn () {
        var wait:NSTimeInterval = 1.0
        let waitIncrement:NSTimeInterval = 0.05
        let duration:NSTimeInterval = 0.15
        func removeAndMove(card:Card) {
            let oldParent = card.parent!
            card.removeFromParent()
            addChild(card)
            card.position = CGPointMake(500,48)
            var sequence = [SKAction]()
            sequence.append(SKAction.waitForDuration(wait))
            sequence.append(SKAction.runBlock({
                card.removeFromParent()
                oldParent.addChild(card)
                card.position = CGPointMake(100,100)
            }))
            card.runAction(SKAction.sequence(sequence))
            wait += waitIncrement
        }
        let stack = childNodeWithName("Stack")
        let card = stack?.childNodeWithName("Card")
        removeAndMove(card as! Card)


    }

}

class Stack:SKSpriteNode {
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("Stack Touch")
    }
}
class Card:SKSpriteNode {
}

场景正常工作,但触摸不再传递到父节点,即使卡片的 userInteractionEnabled 为 false 并且卡片的父节点为 true(堆栈:SKSpriteNode)

所以,我用一个有效的测试用例更新了它。这是一个错误,因为它适用于 iOS 8.4 sim,但不适用于 9 GM。我已经提交给苹果了。

【问题讨论】:

  • 您能否在新的示例项目中重现该问题?这通常有助于缩小此类问题的原因。
  • 我用一个工作项目更新了它。如果您在新的 Sprite Kit 游戏中替换默认的 GameScene(并添加两个必需的图像 stack_background 和 card_background_blank,您可以重现该问题。
  • iOS 7 中似乎也存在这个错误,see this thread

标签: ios swift sprite-kit ios9 xcode7


【解决方案1】:

这是一个错误。

我创建了一个测试器类来测试错误的存在并采取相应的行动......

可以找到here

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 2014-10-29
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多