Почему моя нода тормозит, когда собирает монету?

Моя игра в основном представляет собой игру с прыжками, когда вы нажимаете на экран, узел героя прыгает и собирает монеты, идущие из правой части экрана. Когда он собирает монету, узел-герой замедляется и исчезает из поля зрения. Почему это происходит? Вот код, который у меня есть.

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()

person newtocoding    schedule 12.05.2015    source источник
comment
Кажется, вам не хватает какого-то кода в конце или закрывающей скобки.   -  person sangony    schedule 12.05.2015
comment
Я думаю, это потому, что моя ода герою меньше, чем монета   -  person newtocoding    schedule 12.05.2015


Ответы (1)


Одна из возможностей заключается в том, что вы зарабатываете много золотых монет, которые никогда не удаляются из графа сцены, и это тормозит вашу производительность.

Посмотрите на свои первые четыре строки монет (). Вы создаете постоянно повторяющееся действие, затем создаете последовательность с вечно повторяющимся действием, а затем с действием «удалить со сцены». Последовательность выполняет заданные действия по порядку, но вечно повторяющееся действие никогда не закончится, поэтому действие «удалить со сцены» никогда не будет запущено.

Поэтому, когда вы добавляете Child( goldCoins ), эти монеты никогда не исчезнут. И единственный другой способ, которым они, по-видимому, могут быть удалены, - это столкновение. Итак, если вы играете в игру и добавляете много золотых монет, то у вас будет неограниченное количество монет в игре. Через некоторое время, имея достаточное количество этих монет, все запущенные действия могут замедлить вашу игру.

Другая возможность заключается в том, что вы удаляете только узел спрайта, а не физическое тело из симуляции. На это указывает последняя строка, которую вы включили. Если вы удалите узел, монета исчезнет, ​​но физическое тело все еще будет в игре, по-прежнему влияя на другие физические тела. Если вы хотите полностью удалить монету и ее влияние на симуляцию физики, вам также необходимо удалить ее физическое тело.

person cc.    schedule 12.05.2015