Swift - 如何检查精灵是否分配给某个图像

时间:2016-08-29 00:11:38

标签: swift if-statement sprite-kit

目前,在我的代码中,我有一个名为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部分没有检查球有哪种纹理。

2 个答案:

答案 0 :(得分:1)

将颜色分配给球时设置用户数据。

ball.userData = ["color": 1]
// later you can check
if (ball.userData["color"] == 1) {

这是正确的方法。比较整数会更快。

答案 1 :(得分:1)

的ColorType

您可以使用枚举来表示可能的颜色

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