2014-06-16 1 views
13

J'essaie de sous-classer SKShapeNode avec Swift. Jusqu'à présent, j'ai quelque chose comme ceci:Sous-classe SKShapeNode avec Swift

import UIKit 
import SpriteKit 

class STGridNode: SKShapeNode { 

    init() { 
     super.init() 
     self.name = "STGridNode" 
     self.fillColor = UIColor(red: 0.11, green: 0.82, blue: 0.69, alpha: 1) 
    } 

} 

Dans mon code, je veux donc faire quelque chose le long des lignes de:

let s = STGridNode(rectOfSize: CGSize(width: 100, height: 100)) 

Ma question est - comment puis-je mettre en œuvre rectOfSize dans le initialiseur pour STGridNode? J'ai essayé:

init(rectOfSize: CGPoint) { 
    super.init(rectOfSize: rectOfSize); 
} 

Mais cela donne une erreur: « Impossible de trouver une surcharge init qui accepte les arguments fournis »

+1

Quelle erreur vous obtenez lorsque vous essayez votre méthode initialize? – drewag

+0

@drewag, j'ai mis à jour ma question avec un peu plus de détails. Merci :) – samturner

Répondre

22

Vous avez deux problèmes avec le code que vous avez essayé:

  1. rectOfSize dans SKShapeNode prend un CGSize pas CGPoint
  2. rectOfSize dans SKShapeNode est un initialiseur de commodité donc vous ne serez pas en mesure de l'appeler à partir d'une sous-classe. Vous devrez appeler super.init() et mettre en œuvre la fonctionnalité rect vous

Vous pouvez faire quelque chose comme ceci:

init(rectOfSize: CGSize) { 
    super.init() 

    var rect = CGRect(origin: CGPointZero, size: rectOfSize) 
    self.path = CGPathCreateWithRect(rect, nil) 
} 
+0

Génial, merci - fonctionne très bien! – samturner

+1

self.path = CGPath (rect: rect, transformer: nil) –

Questions connexes