Выбрать объекты, на которые влияют радиальные гравитационные поля

Я работаю над проектом Xcode с набором быстрых и спрайтов, и мне интересно, как я могу выбрать, на какие объекты воздействуют поля радиальной гравитации. В настоящее время у меня есть две звезды и несколько планет, и у каждой звезды есть поле радиальной гравитации. Проблема в том, что звезды обращены к своим собственным гравитационным полям. Как я могу сделать так, чтобы каждое гравитационное поле воздействовало только на одну звезду и все планеты, но не на звезду, за которой она следовала. Я знаю, что это как-то связано с categoryBitMask и / или fieldBitMask, но я точно не знаю как. Заранее спасибо. Ниже приведен код звезды и гравитационного поля. Я не хочу, чтобы это гравитационное поле влияло на эту звезду.

class star: SKSpriteNode {

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

 }

init(imageNamed: String){
    let imageTexture = SKTexture(imageNamed: imageNamed)

    super.init(texture: imageTexture, color: nil, size: imageTexture.size())

    let radius = self.size.width / 2

    self.physicsBody = SKPhysicsBody(circleOfRadius: radius )
    physicsBody?.dynamic = false

}
}

    let star1 = star(imageNamed: "star")
    let gravityField1 = SKFieldNode.radialGravityField()

    star1.position = CGPoint(x: self.size.width / 4, y: self.size.height / 2)
    star1.physicsBody?.friction = 0
    star1.physicsBody?.linearDamping = 0
    star1.physicsBody?.angularDamping = 0
    star1.physicsBody?.angularVelocity = 0.2
    star1.zPosition = 1
    star1.name = "star"
    addChild(star1)


    gravityField1.enabled = true;
    gravityField1.position = CGPoint(x: self.size.width / 4, y: self.size.height / 2)
    gravityField1.strength = Float(pow(radius1, 2)) * pow(10, -3)

    addChild(gravityField1)

1 ответ

Решение

Вот пример того, как установить категорию и битовые маски поля:

Установите битовые маски категории для гравитационных полей

gravityField1.categoryBitMask = gravityField1Category
gravityField2.categoryBitMask = gravityField2Category

Установите битовые маски так, чтобы каждая звезда была подвержена влиянию гравитационного поля другой звезды, но не своей собственной

star1.physicsBody?.fieldBitMask = gravityField2Category
star2.physicsBody?.fieldBitMask = gravityField1Category

Установите битовые маски так, чтобы на планеты воздействовали оба гравитационных поля

planet.physicsBody?.fieldBitMask = gravityField1Category | gravityField2Category
Другие вопросы по тегам