【问题标题】:Adding multiple of the same SKSpriteNode() in swift 4.0在 swift 4.0 中添加多个相同的 SKSpriteNode()
【发布时间】:2019-04-24 13:27:13
【问题描述】:

我知道这个问题已经被问过很多次了,但我一直在网上寻找,找不到我的基本问题的解决方案。

我有一个SKPhysicsContact,它在 2 个对象接触时运行以下代码:

let ball = SKSpriteNode(imageNamed: "circle")
            ball.position = CGPoint(x: self.frame.size.width / 3, y: self.frame.size.height / 3)
            ball.size = CGSize(width: ballSize * 2, height: ballSize * 2)
            ball.physicsBody = SKPhysicsBody(circleOfRadius: ballSize)
            ball.physicsBody?.affectedByGravity = false
            ball.physicsBody?.isDynamic = true
            ball.physicsBody?.restitution = 1
            ball.physicsBody?.linearDamping =  0
            ball.physicsBody?.friction = 0
            ball.zPosition = 2
            ball.physicsBody?.categoryBitMask = PhysicsCategoryBall
            ball.physicsBody?.contactTestBitMask = PhysicsCategoryAll
            ball.physicsBody?.collisionBitMask = PhysicsCategoryWall
            ball.run(colorBlack)
            self.addChild(ball)

SKPhysicsContact 代码第一次运行时,SKSpriteNode“球”被创建。显然,SKPhysicsContact 第二次运行时,游戏崩溃了,因为它试图在“球”已经存在时再次添加“球”。

在添加另一个球之前没有removeFromParent() 在球上,我如何创建一个简单的函数/方法来在每次运行我的SKPhysicsContact 时一遍又一遍地创建相同的SKSpriteNode“球”?

干杯:)

【问题讨论】:

    标签: swift xcode sprite-kit


    【解决方案1】:

    您不应该在接触时创建节点;相反,将它放在其他地方(在所有实体初始化时,等等)。您是否尝试过对其进行深层复制,然后使用该副本? E.G

       let spriteCopy = spriteNode.copy() as SKSpriteNode
    

    欲了解更多信息,请查看How to duplicate a sprite in sprite kit and have them behave differently

    【讨论】:

    • 谢谢!在对您的 .copy() 进行一些研究后,我想通了。我创建了一个节点,然后在 SKPhysicsContact 部分中使用了 .copy() 函数。干杯:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多