私のゲームでは、私はSKSpriteを使用します。いくつかの衝突は検出されません。私は10回試しましたが、衝突はうまくいきましたが、検出されるはずの衝突の約25%が検出されませんでした。なぜ私は多くのことを試みたのか分かりません。衝突は、同じカテゴリのノードでのみ発生します。スウィフト - ランダムな衝突が検出されない
なぜ私は明らかにそれらを見ることができるときにいくつかの衝突が作られていないということは考えられません。ご協力いただきありがとうございます。ここで
はdidBeginContactのコードです:ここで
func didBeginContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody = contact.bodyA
var secondBody: SKPhysicsBody = contact.bodyB
if firstBody.categoryBitMask == secondBody.categoryBitMask {
listContacts.append([firstBody.node!,secondBody.node!])
}
}
}
はdidEndContactのコードです:
rectangle.physicsBody = SKPhysicsBody(rectangleOfSize: rectangle.size)
rectangle.physicsBody?.dynamic = true
rectangle.physicsBody?.collisionBitMask = PhysicsCategory.None
:私は新しいSKSpriteNodeを宣言するときに
func didEndContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody = contact.bodyA
var secondBody: SKPhysicsBody = contact.bodyB
if contact.bodyA.categoryBitMask == contact.bodyB.categoryBitMask {
for i in listContacts{
if (i.contains(firstBody.node!) && i.contains(secondBody.node!)){
let findIndex = listContacts.indexOf { $0 == i }
listContacts.removeFirst(findIndex!)
}
}
}
は最後に、私はこれを設定しましたusesPreciseCollisionDetection = trueは何も変更しないのでusePrecisionCollisionDetectionは使用しません。
すべてのSKSpriteNodeは、同じSKSpriteNodesだけが衝突するため、カテゴリBitmaskとcontactTestBitmaskが等しいものとします。
また:あなたは何が起こるかを簡単に理解したい場合は最後にここに
physicsWorld.gravity = CGVectorMake(0, 0)
physicsWorld.contactDelegate = self
は(衝突の問題は、長方形の間にある)私のゲームの短いビデオですhttps://www.youtube.com/watch?v=-pbmKwQiE9U
タッチ機能を投稿できますか?ビデオをタップしてブロックを削除したようですが、正しいですか? – Siriss
@Sirissあなたは正しいですが、巨大な機能であり、多くのテストを行いました。なぜなら、listContactsには接続がないため、衝突検出が原因であることが分かります。基本的にtouch関数は、listContactsを使ってどの矩形が隣り合っているかをチェックします。そして、同じ色の隣に最小3がある場合、それらは消えます。 – Oscar