如何在循环中添加 SKSpriteNode [关闭]

Posted

技术标签:

【中文标题】如何在循环中添加 SKSpriteNode [关闭]【英文标题】:how to add SKSpriteNode in a loop [closed] 【发布时间】:2015-06-15 14:18:12 【问题描述】:

我想在场景中循环添加一些方块。 但是这段代码有问题。 怎么了?

var shape = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 100, height: 100))

for (var i=0 ; i<10 ; i++)
    
        shape.name = "shape\(i)"
        shape.position = CGPointMake(20,20)
        self.addChild(shape)
    

【问题讨论】:

你肯定添加了很多次 tile 对象 另外,您正在创建一个形状变量,然后添加一个平铺变量。我想这是一个错字? @nmokkary 你想做什么?什么是瓷砖?为什么在指定名称和位置后不使用形状? 【参考方案1】:

这里有一些问题。使用您当前的代码,您尝试将相同的 SKSpriteNode 多次添加到同一个父级(场景)。这是不可能的,因为一个节点当时只能有一个父节点。另一件事,这不是问题,但可能会让您感到困惑的是,您在同一位置添加了多个节点,因此看起来好像只添加了一个节点。

你要做的是创建一个“shape”变量的副本并将它们相应地添加到场景中,如下所示:

import SpriteKit

class GameScene: SKScene 

    override func didMoveToView(view: SKView) 

        var shape = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 20, height: 20))


        for (var i=0 ; i<10 ; i++)
        

            var sprite = shape.copy() as SKSpriteNode

            sprite.name = "shape\(i)"
            sprite.position = CGPointMake(20 + CGFloat(i*30) , CGRectGetMidY(self.frame) )
            self.addChild(sprite)
        


    


否则,如果你运行你的代码,你会得到一个关于添加一个已经有父节点的错误。希望这有助于了解正在发生的事情。

与所有这些无关,但您可能会发现在视图控制器中启用调试标签(如果您尚未启用)以查看节点计数、绘制计数、视觉物理表示等信息很有用。这可以使您免于将来的一些麻烦。以下是启用所有这些的方法:

(在 viewDidLoad 方法或您用来初始化场景的任何方法中):

skView.showsFPS = true
skView.showsNodeCount = true
skView.showsPhysics = true
skView.showsDrawCount = true

【讨论】:

虽然这是一个很好的答案,但最后您会得到一个重复的对象,因为在复制之前,您正在更改前一个节点。您应该将形状复制到一个新节点之前设置名称和位置。 @EmilioPelaez 是的,谢谢,我只是想指出问题所在,而不是担心其他细节 :) 我会更新我的答案。

以上是关于如何在循环中添加 SKSpriteNode [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

按下时向 SKSpriteNode 添加视觉效果

swift - 在变量名中使用整数for循环

如何在 Eclipse 中拆分字符串并将项目添加到 ListView(用于循环/迭代)? [关闭]

SKSpriteNode 的循环位置

向 SKSpriteNode(或 SKScene)添加背景模糊

SKScene - 如何从 SKSpriteNode 获取类