how to add SKSpriteNode in a loop

时间:2015-06-15 14:18:13

标签: swift sprite-kit skspritenode

I want to add some squares in a scene by loop. But this code has a problem. What is wrong?

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)
    }

1 个答案:

答案 0 :(得分:4)

这里有一些问题。使用当前代码,您尝试多次向同一父(场景)添加相同的SKSpriteNode。这是不可能的,因为一个节点当时只能有一个父节点。另一件事,这不是一个问题,但它可以让你困惑的是你在同一位置添加多个节点,所以看起来只有一个节点被添加。

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

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