【问题标题】:how to add SKSpriteNode in a loop [closed]如何在循环中添加 SKSpriteNode [关闭]
【发布时间】: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 你想做什么?什么是瓷砖?为什么在指定名称和位置后不使用形状?

标签: swift sprite-kit skspritenode


【解决方案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 是的,谢谢,我只是想指出问题所在,而不是担心其他细节 :) 我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2020-12-23
相关资源
最近更新 更多