【问题标题】:Why is my node slowing down when it collects a coin?为什么我的节点在收集硬币时会变慢?
【发布时间】:2015-05-12 15:26:19
【问题描述】:

我的游戏基本上是一个跳跃游戏,当您点击屏幕时 heroNode 会跳跃并收集来自屏幕右侧的硬币。当它收集硬币时,英雄节点会减速并离开视野。为什么会这样?这是我的代码。

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

【问题讨论】:

  • 您似乎在末尾缺少一些代码或右括号。
  • 我觉得是因为我的英雄颂比硬币还小

标签: swift sprite-kit skaction


【解决方案1】:

一种可能性是,您制作了许多从未从场景图中移除的金币,这会拖累您的表现。

看看你的前四行coins()。您创建一个永远重复的动作,然后创建一个具有永远重复动作的序列,然后是“从场景中移除”动作。序列按顺序执行给定动作,但永远重复的动作永远不会结束,因此永远不会触发“从场景中移除”动作。

因此,当您添加Child(goldCoins) 时,这些硬币永远不会消失。显然可以将它们移除的唯一其他方法是碰撞。因此,如果您玩游戏,并且添加了很多金币,那么您将拥有无限数量的金币。一段时间后,拥有足够的这些硬币,所有正在运行的动作,可能会导致你的游戏变慢。

另一种可能性是,您要移除的只是精灵节点,而不是模拟中的物理实体。这是您包含的最后一行建议的。如果您移除节点,硬币会消失,但物理体仍会发挥作用,仍会影响其他物理体。如果你想完全移除硬币——以及它对物理模拟的影响——你也需要移除它的物理体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2014-01-22
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多