2015-05-12 28 views
0

我的游戏基本上是一个跳跃游戏,当你点击屏幕时,英雄节点跳转并收集来自屏幕右侧部分的硬币。当它收集硬币时,英雄节点慢下来,并且退出视野。为什么会发生?下面是我的代码。为什么我的节点在收集硬币时变慢了?

func coins() { 
    let moveToLeft = SKAction.moveByX(-self.size.width, y: 0, duration: 2.0) 
    let repeatMoveToLeft = SKAction.repeatActionForever(moveToLeft) 
    let removeFromScene = SKAction.removeFromParent() 
    let sequenceThisMoveAndRemove = SKAction.sequence([repeatMoveToLeft, removeFromScene]) 


    goldCoins.position = CGPointMake(self.size.width/0.6, self.size.height/2) 
    goldCoins.zPosition = 15 
    goldCoins.setScale(0.9) 
    goldCoins.runAction(sequenceThisMoveAndRemove) 
    addChild(goldCoins) 

    goldCoins.physicsBody = SKPhysicsBody(circleOfRadius: 5) 
    goldCoins.physicsBody?.affectedByGravity = false 
    goldCoins.physicsBody?.allowsRotation = false 
    goldCoins.physicsBody?.categoryBitMask = GoldCoinCategory 
    goldCoins.physicsBody?.contactTestBitMask = HeroCategory 
    goldCoins.physicsBody?.collisionBitMask = 0 


    func addHero() { 
    let anim = SKAction.animateWithTextures([heroTextureOne, heroTextureTwo], timePerFrame: 0.2) 
    let run = SKAction.repeatActionForever(anim) 

    theHero = SKSpriteNode(texture: heroTextureOne) 
    theHero.runAction(run) 

    theHero.physicsBody = SKPhysicsBody(circleOfRadius: 50) 
    theHero.physicsBody?.affectedByGravity = true 
    theHero.physicsBody?.allowsRotation = false 
    theHero.physicsBody?.categoryBitMask = HeroCategory 

    theHero.setScale(0.5) 
    theHero.position = CGPointMake(self.size.width/4.0, self.size.height/2.0) 
    theHero.zPosition = 15 
    addChild(theHero) 






} 

     if firstBody.categoryBitMask == HeroCategory && sixthBody.categoryBitMask == GoldCoinCategory { 
     sixthBody.node!.removeFromParent() 
+0

您似乎在最后或者右括号丢失了一些代码。 – sangony

+0

我认为这是因为我的英雄颂歌比硬币小 – newtocoding

回答

0

一种可能性是,您制作了大量永不会从场景图中删除的金币,这会让您的表现陷入困境。

看看你的前四行硬币()。你创建一个永久重复的动作,然后用永久重复动作创建一个序列,然后从“从场景中移除”动作。一个序列按顺序执行给定的动作,但永久重复动作永远不会结束,所以“从场景中移除”动作永远不会被触发。

所以当你添加孩子(金币)时,那些硬币永远不会消失。而他们可以明显被除去的唯一方式就是碰撞。所以如果你玩这个游戏,并且加了很多金币,那么你将会有无限数量的硬币在玩。过了一段时间,有足够的这些硬币,所有运行的动作,可能会导致你的游戏减速。

另一种可能性是,你正在移除的是精灵节点,而不是模拟中的物理体。这是你包括的最后一行建议的。如果你移除节点,硬币就会消失,但物理实体仍然在运转,仍然影响其他物理机构。如果你想完全移除硬币 - 以及它对物理模拟的影响 - 你还需要移除它的物理体。

相关问题