Как определить, отличается ли цвет спрайта от другого в определенный момент?

Я постараюсь сразу перейти к делу. Я был бы удивлен, если бы кто-нибудь знал, как мне помочь в этом.

Я постараюсь описать то, что мне нужно.

У меня есть два прямоугольника, которые падают на экран с определенной скоростью, а затем, как только эти два падают, начинают падать два новых. Между двумя прямоугольниками есть зазор, в который вы пытаетесь поместить мяч. Мяч будет либо красным, либо зеленым, либо синим. Два прямоугольника будут одного цвета, но также могут быть красного, зеленого или синего цвета. Мне нужно как-то определить, когда мой мяч попадает в зазор, совпадают ли цвет мяча и цвет двух прямоугольников. ЭТО ВОЗМОЖНО?

Вот код, который случайным образом выбирает цвета шара и прямоугольников.

 var colorBucket = [UIColor]()

func randomColor() -> UIColor {

    if colorBucket.isEmpty {
        fillBucket()
    }

    let randomIndex = Int(arc4random_uniform(UInt32(colorBucket.count)))
    let randomColor = colorBucket[randomIndex]
    colorBucket.removeAtIndex(randomIndex)
    return randomColor

}

func fillBucket() {
    colorBucket = [UIColor.redColor(), UIColor.greenColor(), UIColor.blueColor()]
}

Я не могу понять это.

Я думал, что мне понадобится spritekitnode, прикрепленный к каждому прямоугольнику, и при столкновении шара я проверял, совпадают ли два цвета. Есть ли другой способ? Любая помощь будет оценена по достоинству.

Вот как это выглядит.


person Tiptech    schedule 16.06.2016    source источник
comment
Являются ли прямоугольники и шар SKSpriteNode(ами)?   -  person Luca Angeletti    schedule 17.06.2016
comment
@appzYourLife Да.   -  person Tiptech    schedule 17.06.2016
comment
И это специальные классы?   -  person Luca Angeletti    schedule 17.06.2016
comment
@appzYourLife пусть Wall1 = SKSpriteNode(imageNamed: Walls) и пусть Ball = SKSpriteNode(imageNamed: Ball) Я не знаю, что вы подразумеваете под пользовательскими классами. Это то, что у меня есть   -  person Tiptech    schedule 17.06.2016
comment
Смотри мой ответ ниже   -  person Luca Angeletti    schedule 17.06.2016
comment
@appzYourLife Нужно ли мне что-то менять в моем коде? Где разместить классы? Мне вообще нужно изменить ваш ответ?   -  person Tiptech    schedule 17.06.2016
comment
Я добавил новый раздел в свой ответ, пожалуйста, посмотрите.   -  person Luca Angeletti    schedule 17.06.2016
comment
@appzYourLife Совсем не хочу вас раздражать. Но я не могу просто установить для своей Стены красный цвет. Он может быть красным, зеленым или синим из-за рандомизации в моем коде выше. В зависимости от того, что это такое, мне нужно проверить, имеет ли мой мяч тот же цвет, что и моя стена, ТОЛЬКО когда он достигает самого низа стены. Я стараюсь изо всех сил, чтобы иметь смысл.   -  person Tiptech    schedule 17.06.2016
comment
Да, пожалуйста, посмотрите раздел обновлений в моем ответе.   -  person Luca Angeletti    schedule 17.06.2016
comment
Вы пробовали мой код?   -  person Luca Angeletti    schedule 17.06.2016
comment
@appzYourLife Да. Это не сработало. Я не могу просто установить свой wall1.color = на красный, потому что он случайным образом выбирается каждые несколько секунд, чтобы быть другим цветом.   -  person Tiptech    schedule 17.06.2016
comment
И почему вы не можете обновить цвет спрайта, как только генерируется новый случайный цвет?   -  person Luca Angeletti    schedule 18.06.2016
comment
@appzYourLife, потому что цвета меняются в середине игры.   -  person Tiptech    schedule 18.06.2016
comment
Хорошо, но вы все равно можете изменить цвет своих спрайтов. Я действительно не вижу проблемы.   -  person Luca Angeletti    schedule 18.06.2016
comment
@appzYourLife Я не хочу менять их цвет. Я хочу написать оператор if, который проверяет, одного ли цвета мяч и стены, между которыми он проходит.   -  person Tiptech    schedule 18.06.2016


Ответы (1)


Конечно, это возможно!

Учитывая ваш Rectangle класс

class Rectangle: SKSpriteNode {
    init(color: SKColor) {
        let texture = SKTexture(imageNamed: "rectangle")
        super.init(texture: texture, color: color, size: texture.size())
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

а ты Ball класс

class Ball: SKSpriteNode {
    init(color: SKColor) {
        let texture = SKTexture(imageNamed: "ball")
        super.init(texture: texture, color: color, size: texture.size())
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Вы можете сравнить два экземпляра, просто написав

let ball = Ball(color:.redColor())
let rectangle = Rectangle(color:.redColor())

print(ball.color == rectangle.color) // true

Обновлять

Похоже, вы не используете подкласс SKSpriteNode.

На самом деле вы используете SKSpriteNode напрямую, как это

let wall1 = SKSpriteNode(imageNamed: "Walls")
let ball = SKSpriteNode(imageNamed: "Ball")

В этом случае просто не забудьте добавить цвет к этим спрайтам при их создании.

wall1.color = .redColor()
ball.color =  .redColor()

Теперь вы можете сравнить их по цвету

if wall1.color == ball.color {
    print("same color!")
}
person Luca Angeletti    schedule 16.06.2016