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