代码之家  ›  专栏  ›  技术社区  ›  Jurik Arko Elsenaar

为什么不能在其init函数中设置SKSprite的名称?

  •  0
  • Jurik Arko Elsenaar  · 技术社区  · 9 年前

    我已经扩展了SKSpriteNode,并希望在其init函数中设置其name属性:

    class Ship: SKSpriteNode {
    
    
        var id: Int
    
        /**
         *  Image name of sprite image for this bubble.
         **/
        var image: String
    
        //some other vars but NOT name, because its super class SKNode has already name
    
        init(ship: (name: String, <other vars>), position: CGPoint) {
    
            let texture = SKTexture(imageNamed: self.image)
            super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
            self.name = name //here I set its name!!!
            self.position = position
    
            self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width / 2)
            self.physicsBody!.dynamic = true
        }
    
        required init(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

    但后来,当我使用创建“Ship”时(Ship[1]是包括name在内的一些值):

    var titanic = Ship(ship: ship[1], position: shipPosition!)
    println(titanic.name) //nil
    self.addChild(titanic)
    titanic.name = 'titanic'
    println(titanic.name) //titanic
    

    正如您所看到的,name不是在初始化时设置的,我必须在创建后设置它。

    如何在其init方法中设置此名称?或者我必须在它创建之后才命名它?

    2 回复  |  直到 9 年前
        1
  •  2
  •   jtbandes    9 年前

    在此背景下, self.name = name 实际上意思与 self.name = self.name .

    您试图在 tuple ,所以你可能想要 self.name = ship.name 。(甚至 name = ship.name .)

    或者,您可以将这些作为参数直接传递给初始值设定项:

    init(named name: String, <other vars>, position: CGPoint) {
        // ...
        self.name = name
    }
    
    Ship(named: "titanic", <other vars>, position: shipPosition!)
    
        2
  •  0
  •   Community CDub    7 年前

    你看过这个吗 How to get SKSpriteNode name? ?

    尝试

    sprite1.name = @"sprite1";
    

    正如@jtbandes所指出的,直接初始化名称可能更容易。