3

Swift とスプライト キットを使用して Xcode プロジェクトに取り組んでいますが、放射状の重力フィールドの影響を受けるオブジェクトをどのように選択できるのか疑問に思っています。現在、2 つの星といくつかの惑星があり、各星には放射状の重力場があります。問題は、星が自身の重力場に引き寄せられることです。各重力場が1つの星とすべての惑星にのみ影響を与え、それが追っている星には影響を与えないようにするにはどうすればよいですか? 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)
4

1 に答える 1

4

カテゴリとフィールドのビット マスクを設定する方法の例を次に示します。

重力フィールドのカテゴリ ビット マスクを設定します

gravityField1.categoryBitMask = gravityField1Category
gravityField2.categoryBitMask = gravityField2Category

各星が他の星の重力場の影響を受けるが、それ自身の重力場には影響されないようにビット マスクを設定します。

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

惑星が両方の重力場の影響を受けるようにビット マスクを設定します。

planet.physicsBody?.fieldBitMask = gravityField1Category | gravityField2Category
于 2014-12-10T16:16:53.503 に答える