Ho creato un'estensione della classe SKSpriteNode. Sto facendo oggetti in mattoni, che hanno un comportamento diverso quando vengono colpitiiOS/Swift - Impossibile impostare Enum Value su Init()
import SpriteKit
class Brick: SKSpriteNode {
enum type {
case None, Green, Yellow, Orange, Red
}
static let colorMap = [
Brick.type.Green : UIColor.greenColor(),
Brick.type.Yellow : UIColor.yellowColor(),
Brick.type.Orange : UIColor.orangeColor(),
Brick.type.Red : UIColor.redColor()
]
var brickType = Brick.type.None
convenience init (size: CGSize, type: Brick.type) {
self.init(color: UIColor.whiteColor(), size: size)
// Here I set the initial type and color
// The color is assigned just fine, but the brickType
// variable is still Brick.type.None
self.setType(type)
}
func gotHit() -> Int {
switch (self.brickType) {
case Brick.type.Yellow:
setType(Brick.type.Green);
break;
case Brick.type.Orange:
setType(Brick.type.Yellow);
break;
case Brick.type.Red:
setType(Brick.type.Orange);
break;
case Brick.type.Green: // Green
self.removeFromParent()
return 1
default:
break
}
return 0
}
func setType (typeToSet: Brick.type) {
self.brickType = typeToSet // only works when called from gotHit()
self.color = Brick.colorMap[typeToSet]! // this works everytime
}
}
Poi faccio un esempio di questa classe:
let brickPrototype = Brick(size: CGSizeMake(55, 25), type: Brick.type.Green)
Il mio problema è che, nonostante chiamando setType()
all'interno del convenience init()
, il valore della variabile brickType
pubblica è ancora quella predefinita, Brick.type.None
. Il colore è cambiato senza problemi, quindi l'argomento sembra essere passato correttamente.
Se ho impostato la variabile predefinita brickType
a Brick.type.Yellow
, ed eseguire la funzione gotHit()
, la funzione setType()
sarà effettivamente cambiare il tipo di mattone per Brick.type.Green
, e dopo aver chiamato di nuovo, il nodo viene eliminato dalla vista chiamando self.removeFromParent()
. Quindi sono sicuro che il problema è quando chiamo la funzione da convenience init()
, anche se non ottengo errori.
Puoi mostrare come stai creando l'oggetto e controllando il tipo? Ho appena incollato il tuo codice in un parco giochi e ha funzionato correttamente – Paulw11
Ancora funziona per me nel parco giochi. – Paulw11
Ho aggiunto un semplice "converti l'enum in una funzione stringa" - https://gist.github.com/paulw11/2010f0474429a679a0b9 e restituisce il valore appropriato – Paulw11