func didBeginContact(contact: SKPhysicsContact) {
if (contact.bodyA.categoryBitMask & BodyType.shield.rawValue) == BodyType.shield.rawValue {
contact.bodyB.node?.removeFromParent()
counter++
println(counter)
} else if (contact.bodyB.categoryBitMask & BodyType.shield.rawValue) == BodyType.shield.rawValue {
contact.bodyA.node?.removeFromParent()
counter++
println(counter)
}
}
一の物理本体は、テクスチャからなる同じSKPhysicsBodyに対して複数回呼び出されているshield.physicsBody = SKPhysicsBody(texture: shieldTexture, size: shieldTexture.size())
他方は円sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
didBeginContactは
トウは時々sand.physicsBody = SKPhysicsBody(circleOfRadius: sand.size.width/2)
が呼び出さ互いに接触する物体からある
複数回。私はそれが接触するとすぐにそれを親から削除しても、各オブジェクトに対して一度だけ呼び出されるようにするにはどうすればよいですか。
テクスチャからのボディが内部的に複数のシェイプを生成する可能性があり、それぞれが接触イベントを引き起こす可能性があるため、これは意図した通りに機能します。ノードを削除しても、物理シミュレーションのステップが終了するまでボディが削除されません。この連絡イベントで処理されたノードまたは本体を手動で「マーク」して、後で同じ本体の連絡イベントをスキップする必要があります。 – LearnCocos2D
SKPhysicsBodyのテクスチャからのオプションがパラメータを介して設定されることを望みます。 circleOfRadiusのSKPhysicsBodyは、1つのヒット/コンタクトのみをカウントします。これは、以下の答えを含む余分なロジックを作成するよりも、たいへん望ましいでしょう。また、必要でない場合、連絡先を検出できないリソースを節約することができます。 –