超级奇怪的spritekit错误

时间:2015-01-04 10:00:11

标签: ios debugging swift sprite-kit

好的,我已经在一个简单的项目中重现了这一点,想看看是否有人可以解决这个问题。

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
}

我可以复制粘贴更多代码,与超文本功能相关,但我觉得它是无关的代码。这是一个相当简单的课程。

0 个答案:

没有答案