Ios 如何为while循环中创建的SKSpriteNode创建变量,以便检查sprite的触摸

Ios 如何为while循环中创建的SKSpriteNode创建变量,以便检查sprite的触摸,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我用while循环创建了20个精灵。所有这些精灵都是名为“centerNode”的SKNode的子节点。每个精灵都有一个名字和一个数字(0-19是二十个名字)。每个精灵都有一个在x轴上不同的唯一锚点。当我仅使用以下代码运行应用程序时: var centerNode = SKNode() override func didMove(to view: SKView) { centerNode = self.childNode(withName: "centerNode")!

我用while循环创建了20个精灵。所有这些精灵都是名为“centerNode”的SKNode的子节点。每个精灵都有一个名字和一个数字(0-19是二十个名字)。每个精灵都有一个在x轴上不同的唯一锚点。当我仅使用以下代码运行应用程序时:

    var centerNode = SKNode()



override func didMove(to view: SKView) {

centerNode = self.childNode(withName: "centerNode")!

    var x = 0.0

           while x < 20 {

        let sprite = SKSpriteNode()
        sprite.name = "\(x)"
        sprite.size = CGSize(width: 295, height: 100)
        sprite.color = UIColor.lightGray
        sprite.anchorPoint = CGPoint(x: 2.0 - 2 * x, y: 3)
        sprite.zPosition = 2
        centerNode.addChild(sprite)
        x = x + 1
    }

所有这些都会导致此错误:

“致命错误:在展开可选值时意外发现nil”

这对我来说意味着精灵不是按照我的代码所希望的那样用它们的名称创建的,就是我的变量在错误的地方寻找SKSpriteNode。初始化变量时,这两个函数都将返回nil。我已经在不同的函数中初始化了变量,以确保在创建精灵之前它没有初始化变量。这似乎不是问题所在

我希望能够运行:

if zero.containsPoint(locationOfTouch) {
//then do this
{
但是我不能得到一个变量来处理SKSpriteNodes

有什么解决方案吗?

您的“x”变量是float,因此您的名称可能类似于“0.0”、“1.0”。。。 将此代码:
var x=0.0
更改为var
x:Int=0
您可能需要将锚点代码更改为:

sprite.anchorPoint = CGPoint(x: 2.0 - 2 * CGFloat(x), y: 3)

我甚至不会使用while循环。使用for循环避免代码变得太难看
let zero = self.childNode(withName: "0") as! SKSpriteNode
let zero = centerNode.childNode(withName: "0") as! SKSpriteNode
if zero.containsPoint(locationOfTouch) {
//then do this
{
sprite.anchorPoint = CGPoint(x: 2.0 - 2 * CGFloat(x), y: 3)