SpriteKitの機能をテストしていて、問題が発生しました。私はビットマスク、衝突、カテゴリ、連絡先を読み込んでいました。ほとんどの場合、カテゴリビットマスクのポイントは得られませんが、問題を解決するために必要なビットマスクが衝突します。SpriteKitを使用してオブジェクトが衝突するのを防ぐ
私の問題は2種類あります:オブジェクトと秒です。名前は実際にはあまり意味がありませんが、テストのためだけです。私は2番目に衝動があることを望み、オブジェクトに力を与えたい。私はスプライトにそれぞれのベクトルを適用することができましたが、私はそれらを互いに衝突させたくありません。私は彼らが右を通過し、お互いの存在を無視してほしい。
Iは、互いに異なる衝突ビットマスクを割り当てることによって、その問題を解決しようとした:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let texture = SKTexture(imageNamed: "pokeball")
let object = SKSpriteNode(texture: texture)
object.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: object.size.width,height: object.size.height))
object.physicsBody?.affectedByGravity = false
object.yScale = 0.5
object.xScale = 0.5
for t in touches {
object.position = t.location(in: self)
}
self.addChild(object)
object.physicsBody?.collisionBitMask = UInt32(4)
object.physicsBody?.applyForce(CGVector(dx: 0, dy: 10))
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let texture = SKTexture(imageNamed: "purple")
let second = SKSpriteNode(texture: texture)
let impulse : Double = 20
let x = (impulse * Double(cosf(45)))
let y = Double(impulse * Double(sinf(45)))
let vector = CGVector(dx: x, dy: y)
second.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: second.size.width,height: second.size.height))
second.yScale = 1.5
second.xScale = 1.5
second.physicsBody?.isDynamic = true
for t in touches {
second.position = t.location(in: self)
}
self.addChild(second)
second.physicsBody?.collisionBitMask = UInt32(1)
second.physicsBody?.applyImpulse(vector)
}
ようにオブジェクトが4のビットマスクを有する:
object.physicsBody?.collisionBitMask = UInt32(4)
そして第1のビットマスクを有する。
second.physicsBody?.collisionBitMask = UInt32(1)
私はシミュレータを使いましたが、まだ衝突していましたので、私はオンラインになり、いくつかの回答のためのk:私は数字のように使用する必要があると言うものを見つけました:
これらはビットマスクです、あなたは任意の数字1,2,3,4,5を使用することはできません - 4,8,16など -
誰かが理由を説明できますか?しかし、1と4を使用していたのでそれは問題ではなかった
次の質問私は二進数(0100)と(0010)を使用しなければならなかったと言いました。
私は衝突の絵を残します: Collisions
なぜこれが起こっている誰もが知っていますか?もしこれが本当にダムなミスやすでに尋ねられていることであれば、私はそれを見つけることができませんでした。
これを見てください:http://stackoverflow.com/a/39064710/3402095カテゴリービットマスクのデフォルト値を探します。それはすべてそこに説明されています。 – Whirlwind
物理ボディにcollisionBitMAskが4であることを指定すると、categoryBitMaskが4のphysicsBodyと衝突します(実際には '4'ビットがオンになっていますが、最も簡単な例から始めます)。あなたがcategoryBitMasksを見たことが気にならないなら、物事はうまくいかないでしょう。 –