目前,在我的代码中,我有一个名为ball的SKSpriteNode,当它与任何东西接触时随机改变纹理。有4种不同的纹理/图像,每种纹理/图像都有不同颜色的球。我想使用if else语句来检查球是否等于特定的纹理,以便它可以做一个动作。
到目前为止我有这个代码,但它并没有真正检查球精灵的纹理
func didBeginContact(contact: SKPhysicsContact) {
if ball.texture == SKTexture(imageNamed: "ball2") && platform3.position.y <= 15 {
print("Color is matching")
} else {
print("Not matching")
}
}
if platform3.position.y&lt; = 25部分有效,但代码的ball.texture部分没有检查球有哪种纹理。
答案 0 :(得分:1)
将颜色分配给球时设置用户数据。
ball.userData = ["color": 1]
// later you can check
if (ball.userData["color"] == 1) {
这是正确的方法。比较整数会更快。
答案 1 :(得分:1)
您可以使用枚举来表示可能的颜色
enum ColorType: String {
case red = "redBall", green = "greenBall", blue = "blueBall", white = "whileBall"
}
每个枚举案例的原始值是图像的名称。
接下来将您的精灵类声明如下。如您所见,我正在跟踪当前的colorType
。此外,只要更改colorType,就会为sprite分配一个新纹理
class Ball: SKSpriteNode {
var colorType: ColorType {
didSet {
self.texture = SKTexture(imageNamed: colorType.rawValue)
}
}
init(colorType: ColorType) {
self.colorType = colorType
let texture = SKTexture(imageNamed: colorType.rawValue)
super.init(texture: texture, color: .clearColor(), size: texture.size())
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
let ball = Ball(colorType: .blue)
if ball.colorType == .blue {
print("Is blue")
}
ball.colorType = .green