【问题标题】:How to completely remove SKAction from the view如何从视图中完全删除 SKAction
【发布时间】:2015-09-20 17:11:55
【问题描述】:

所以我有一个游戏,你需要射击敌人。当 touchesBegan 子弹从你的手指下射出,当 touchesEnded 时——它会向敌人开火。我用 SKActions 做到了。它运行良好,直到游戏结束。我没有特别的场景,它只是一个带有按钮的节点。但是当它出现时,SKActions 对子弹和敌人仍然是通过触摸运行的。我想在游戏结束时禁用它们并且不知道该怎么做。例如,我创造的一个敌人是这样的:

func addMiddleHeart() {
    middleheart = SKSpriteNode(imageNamed: "redh")
    middleheart.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) + 100)
    middleheart.zPosition = 1
    middleheart.physicsBody = SKPhysicsBody(circleOfRadius: middleheart.size.width / 2)
    middleheart.physicsBody?.dynamic = true
    middleheart.physicsBody?.categoryBitMask = PhysicsCategory.MiddleHeart
    middleheart.physicsBody?.contactTestBitMask = PhysicsCategory.Arrow
    middleheart.physicsBody?.collisionBitMask = PhysicsCategory.None
    addChild(middleheart)

    let moveToPoint = SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame) + leftHeart.size.height * 1.5), duration: 0.5)
    SKActionTimingMode.EaseOut
    middleheart.runAction(moveToPoint)
}

      override func didMoveToView(view: SKView) {
 runAction(SKAction.runBlock(addMiddleHeart))
}

【问题讨论】:

    标签: sprite-kit skaction


    【解决方案1】:

    gameScene.removeAllActions() 是您要使用的语句。它会不加选择地删除所有正在运行的SKActions

    【讨论】:

    • 好的,谢谢!但我只需要删除几个动作,因为我的 gameOverNode 和按钮也在添加动作!或者这个声明只杀死现在运行的动作而不打扰新的动作?在那种情况下,它对我没有用,因为一旦玩家不小心点击了一个空白区域 - 我的子弹就会作为一个新动作再次被调用,对吗?
    • 是的,它只会删除当前的动作,新的动作仍然可以触发。但是解决问题的一种方法是添加一个gameOver 布尔变量,该变量在游戏结束时变为真。让您的 touchesBegan 方法在添加项目符号之前检查 gameOver 布尔变量。如果gameOver 为真,则不要添加动作!
    • 是的,我这样做了,但它对我不起作用。我想知道为什么?这可能是因为我在游戏结束函数中声明了它所以它不起作用吗?
    • 我想,如果没有办法解决这个问题,我会将我的节点定位为CGRectGetMaxX(self.frame) * 10000,并且玩家将无法碰撞它们。虽然这不是一个伟大的想法......
    • gameOver 布尔值应该在类范围内。不要在game over function中声明它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2017-03-07
    • 2014-01-09
    • 2023-04-01
    • 2018-12-19
    相关资源
    最近更新 更多