如何在循环中添加 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Eclipse 中拆分字符串并将项目添加到 ListView(用于循环/迭代)? [关闭]