Xcode 7 SpriteKit 块错误
Xcode 7 SpriteKit Error with Blocks
有人知道为什么这在 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 (a Stack:SKSpriteNode)
所以,我已经用一个有效的测试用例更新了它。这是一个错误,因为它在 iOS 8.4 sim 中有效,但在 9 GM 中无效。我已经提交给苹果了。
这是一个错误。
我已经创建了一个测试器 class 来测试是否存在错误并采取相应措施...
可以找到here
有人知道为什么这在 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 (a Stack:SKSpriteNode)
所以,我已经用一个有效的测试用例更新了它。这是一个错误,因为它在 iOS 8.4 sim 中有效,但在 9 GM 中无效。我已经提交给苹果了。
这是一个错误。
我已经创建了一个测试器 class 来测试是否存在错误并采取相应措施...
可以找到here