Axe*_*min 3 ios sprite-kit swift xcode6-beta6
我注意到我的Swift项目中有一个奇怪的行为,并在一个空的SpriteKit项目上重现它:
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let sprite = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite)
//sprite.removeFromParent()
let sprite2 = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite2)
sprite2.removeFromParent()
}
}
Run Code Online (Sandbox Code Playgroud)
它在应用程序启动之前崩溃,我只能看到:

我的配置是xCode6-Beta6,iPad Mini Retina,iOS8-Beta5和OSX 10.9.4.我还复制了模拟器中的bug; 使用xCode6-Beta5; 并在touchesBegan方法中移动代码
取消注释该行sprite.removeFromParent()会使错误消失.
重要提示:自iOS 8.1以来,此错误已得到纠正,请确保更新并使您的应用无法用于iOS 8.0及更早版本.
我发现了会发生什么......应该是一些Apple员工犯了错误.解释:
let sprite = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite)
let sprite2 = SKSpriteNode(imageNamed:"Spaceship")
self.addChild(sprite2)
sprite2.removeFromParent()
println( sprite == sprite2 ) // Returns "true"
// Then crash
Run Code Online (Sandbox Code Playgroud)
如果你这样做:
let sprite = SKSpriteNode(imageNamed:"Spaceship")
sprite.name = "1"
self.addChild(sprite)
let sprite2 = SKSpriteNode(imageNamed:"Spaceship")
sprite2.name = "2"
self.addChild(sprite2)
sprite2.removeFromParent()
println( sprite == sprite2 ) // Returns "false"
// Then all is right, no crash
Run Code Online (Sandbox Code Playgroud)
我认为非常简单,当你.removeFromParent()在代码中调用Apple的代码检查时,==就像在Objective-C中一样.但是因为它是Swift你应该做的===是检查对象的平等而不是==,所以这是一个愚蠢的错误.
恭喜你在SpriteKit Code中发现了一个错误,请填写Apple:D 表格
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |