【问题标题】:Swift Spritekit - Problems adding the same sprite to the scene if one is already addedSwift Spritekit - 如果已经添加了相同的精灵,则将相同的精灵添加到场景中时出现问题
【发布时间】:2016-01-28 14:14:45
【问题描述】:

我的 SKScene 使用以下代码以特定时间间隔将精灵添加到屏幕上,但如果在添加下一个精灵时屏幕上已经有精灵,我的应用程序将冻结。有没有办法在不冻结应用程序的情况下将相同的精灵添加到屏幕?

let timer = SKAction.waitForDuration(1.00)
let addSpriteNode = SKAction.runBlock{
    self.addSprite()        
}

let sequence = SKAction.sequence([timer, addSpriteNode])
self.runAction(SKAction.repeatActionForever(sequence), withKey: "Sprites")

【问题讨论】:

    标签: ios swift sprite-kit skspritenode xcode7.1


    【解决方案1】:

    注意:我目前不在能够运行 Xcode 的计算机上,所以我的内存不足。

    注 2:如果我可以发表评论,我会要求您包含位于 addSprite 函数中的代码。但是,由于缺乏声誉,我无法这样做。通过包含该代码,您可以获得更快、更准确的答案,因为这是创建和添加精灵的代码。

    回答: 您提到您正在尝试将相同的精灵添加到屏幕 - 可能是这样的:

    let sprite = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(50,50))
    func addSprite() {
        addChild(sprite)
    }
    

    您不能在屏幕上多次显示相同的精灵。相反,每次你想要一个新的精灵添加到屏幕上时,你都必须创建一个新的精灵。在你的addSprite 函数中,你的代码应该创建一个新的精灵,设置它的属性,然后将它添加到主视图中,如下所示:

    fun addSprite() {
        let sprite = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(50,50)) // Creates a new sprite. You can customize this as needed.
        addChild(sprite) // Adds newly created sprite to screen.
    }
    

    我希望这会有所帮助。如果您发布代码,我可以提供更适合您问题的答案。

    【讨论】:

    • 是的,我现在得到的唯一问题是在与精灵发生碰撞并将其从屏幕上删除时使用粒子效果,如果我删除该精灵,它会删除所有精灵而不是那个特定精灵。并在它发生碰撞时获取该精灵的位置以产生效果。该效果适用于屏幕上除碰撞精灵以外的所有节点 :( 对不起,如果我问了愚蠢的问题,感谢您回答我的问题。
    • @Rachel Evans 所以你的问题是它被从屏幕上删除了,是吗?我对 SpriteKit 不是非常流利,但它应该能够让您为每个精灵设置一个可以充当标签的名称。然后,您只能删除具有该名称的精灵。这取决于程序,因为如果屏幕上有很多精灵,它可能会很慢。这只是一个想法,您必须自定义它,因为每个程序都有自己的需求。乐意效劳!没有愚蠢的问题,只有愚蠢的错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多