Bir SKSpriteNode sınıfı uzantısı oluşturdum. Onlar bu sınıfının bir örneğini yapmak Ardından iOS/Swift - Enit Değeri ayarlanamıyor 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
}
}
vurulmak zaman farklı davranışa sahip tuğla nesneleri yapıyorum:
let brickPrototype = Brick(size: CGSizeMake(55, 25), type: Brick.type.Green)
Benim sorun olduğunu, convenience init()
iç setType()
arama rağmen Genel brickType
değişkeninin değeri, varsayılan değer olan Brick.type.None
'dur. Renk sorunsuz olarak değiştirilir, bu nedenle argümanın doğru bir şekilde geçtiği görülmektedir. Ben Brick.type.Yellow
varsayılan brickType
değişkeni ayarlamak ve gotHit()
fonksiyonunu çalıştırmak, setType()
işlevi etkin bir Brick.type.Green
için tuğla türünü değişecek ve tekrar çağırdıktan sonra düğüm self.removeFromParent()
arayarak görünümünden silinir Eğer
. Bu yüzden, hata olmamasına rağmen, convenience init()
işlevini çağırdığımda sorun olduğundan eminim.
Nesneyi nasıl oluşturduğunuzu ve türünü nasıl kontrol edeceğinizi gösterir misiniz? Kodunuzu bir oyun alanına yapıştırdım ve doğru çalıştım – Paulw11
Oyun alanında hala benim için çalışıyor. – Paulw11
Basit bir "enum bir dize işlevine dönüştür" ekledim - https://gist.github.com/paulw11/2010f0474429a679a0b9 ve uygun değeri döndürüyor – Paulw11