好的,我已经在一个简单的项目中重现了这一点,想看看是否有人可以解决这个问题。
https://drive.google.com/file/d/0B4kzFbLmJr19QzFEa3NEZERLVnc/view?usp=sharing
点击以在红色方块发送黄色方块,从而导致碰撞。红色方块应该旋转,但它不会。进入didBeginContact,取消注释所注明的代码,你会看到它旋转。超级奇怪。
我遇到了一个令我难过的错误。我真的无法想象这一个。我已经尝试了所有显而易见的事情,并将其简化了很久。
当我尝试在didBeginContact中旋转我的精灵时,我必须在一个动作内部这样做才能使它工作。请看以下示例:
无效
func didBeginContact(contact: SKPhysicsContact) {
println(self.hyperShip.zRotation) // prints 0 (next time STILL zero, NO PLACE IS THIS RESET)
self.hyperShip.zRotation = 1
println(self.hyperShip.zRotation) // prints 1
}
如果我在动作中运行代码
工作原理
func didBeginContact(contact: SKPhysicsContact) {
println(self.hyperShip.zRotation) // first time 0, thereafter 1
self.runAction(SKAction.runBlock({
self.hyperShip.zRotation = 1
}))
println(self.hyperShip.zRotation) // first time 0, thereafter 1
}
有什么区别?为什么这会有不同的表现。它太怪异了。我不明白为什么他们的行为有所不同。
如果我在更新中触发此代码或其他任何地方它正常工作
超文本是skspritenode(baseship)的另一个子类的子类..不确定为什么会产生影响,但我认为id包括该细节
编辑:我如何分配超文本
我将它作为属性
分配在hyperscene的顶部let hyperShip: HyperShip = HyperShip()
我的场景初始化
中的一些设置hyperShip.lives = self.lives
self.indicators.livesDisplay.text = "\(hyperShip.lives)"
hyperShip.addToParent(gameLayer)
addToParent函数
override func addToParent(parentNode: SKNode){
super.addToParent(parentNode)
parentNode.addChild(self)
self.hyperScene = parentNode.scene as HyperScene
self.shipTrail.zPosition = -1
self.shipTrail.position = CGPoint(x: convertNum(-8), y: 0)
self.addChild(self.shipTrail)
self.hyperTrail.targetNode = self.hyperScene.starFieldFG.node
self.addChild(self.hyperTrail)
}
baseShip中的addToParent函数
func addToParent(parentNode: SKNode){
self.baseScene = parentNode.scene as BaseScene
}
超人的初始
override init(){
super.init()
}
baseship的初始
override init() {
let texture = shipAtlas.textureNamed("ship")
super.init(texture: texture, color: nil, size: texture.size())
self.color = SKColor.grayColor()
self.zPosition = 1
}
我可以复制粘贴更多代码,与超文本功能相关,但我觉得它是无关的代码。这是一个相当简单的课程。