ios - 如何将多个节点添加到场景并一次移动所有节点。 swift 。 SpriteKit

标签 ios swift sprite-kit

我是 swift 和 spriteKit 的新手。我正在创建横向滚动游戏。我希望它从屏幕右侧的任意高度添加多个节点(称为 Impenitrible)并向左移动。我创建“Impenitrible”节点的功能是:

func spawnImpenitrible(){
   Impenitrible.physicsBody = SKPhysicsBody(rectangleOfSize: Impenitrible.size)
           let actionDone =  SKAction.removeFromParent()
    var MinValue = sand.size.height
    var MaxValue = self.size.height - Impenitrible.size.height / 2
    var spawnPoint = UInt32(MaxValue - MinValue)
    Impenitrible.position = CGPoint(x: self.size.width - 60 , y: CGFloat(arc4random_uniform(spawnPoint)))

    Impenitrible.physicsBody?.categoryBitMask = physicsCategory.impenitrible
    Impenitrible.physicsBody?.contactTestBitMask = physicsCategory.sub
    Impenitrible.physicsBody?.affectedByGravity = false
    Impenitrible.physicsBody?.dynamic = true
    self.addChild(Impenitrible)


}

我调用这个函数:

var impenitribleTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("spawnImpenitrible"), userInfo: nil, repeats: true)

我通过从“更新”函数中的 x 位置减去一个数字来移动它。

添加一次 Impenitrible 效果很好。但是一旦它再次调用该函数,应用程序就会崩溃并出现错误:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'试图添加一个已经有父级的 SKNode 我哪里做错了?任何帮助都会很棒!谢谢。

最佳答案

首先,我想指出您的代码行:let actionDone = SKAction.removeFromParent() 实际上是无用的,因为您从未调用 runAction 来使用它。

错误消息很好地总结了它。 “试图添加一个已经有父节点的 SKNode”。您实际上从未调用过 removeFromParent()

添加 Impenitrible 一旦你发现效果很好,因为在开始时,Impenitrible 没有父级。后续调用将发生冲突,因为 Impenitrible 已经具有通过第一次调用添加的父级。

一个快速而肮脏的修复是在下一次调用 spawnImpenitrible 之前执行 runAction(SKAction.removeFromParent()),在某处引用 Imprenitrible

关于ios - 如何将多个节点添加到场景并一次移动所有节点。 swift 。 SpriteKit ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132851/

相关文章:

ios - 如何杀死多次点击的 Sprite ?

ios - UIView纵横比混淆systemLayoutSizeFittingSize

objective-c - 核心图像 CIPerspectiveTransform 过滤器 : How to use CIVectors?

swift - 嵌套枚举以允许多个时间范围

swift - 可以具有 NSObject、Mappable 和 Object swift 的 BaseObject

swift - 不同国家的不同应用程序名称

ios - SpriteKit游戏中的AVAudioPlayer和性能问题

swift - SpriteKit : Howto make holes in layer with blendMode

ios - iOS 中的自动 OTP 验证?

ios - 指定要在 iOS 上的 audiounit 渲染回调中处理的帧数