私は、基本的に壁の束である私の "Floor.swift"クラスを持っています。私は、画面の上から来るオブジェクトを持っていて、FloorとSKSpriteNodesが衝突すると、SKSpriteNodeを削除したいと思います。以下は私のフロアクラスです。 「func didBegin(_ contact: SKPhysicsContact)
」の下で私のGameSceneクラスで次にSKPhysicsContact not detected categoryBitMask Collision
import Foundation
import SpriteKit
class Floor: SKNode {
override init() {
super.init()
let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 5, height: 50))
leftWall.position = CGPoint(x: 0, y: 50)
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)
leftWall.physicsBody!.isDynamic = false
self.addChild(leftWall)
let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 5, height: 50))
rightWall.position = CGPoint(x: 375, y: 50)
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)
rightWall.physicsBody!.isDynamic = false
self.addChild(rightWall)
let bottomWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 500, height: 10))
bottomWall.position = CGPoint(x: 150, y: -5)
bottomWall.physicsBody = SKPhysicsBody(rectangleOf: bottomWall.size)
bottomWall.physicsBody!.isDynamic = false
self.addChild(bottomWall)
// Set the bit mask properties
self.physicsBody?.categoryBitMask = floorCategory
self.physicsBody?.contactTestBitMask = objectCategory | pointCategory | lifeCategory
self.physicsBody?.collisionBitMask = dodgeCategory
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemted")
}
}
私が書いた:
if (contact.bodyA.categoryBitMask == floorCategory) && (contact.bodyB.contactTestBitMask == objectCategory | pointCategory | lifeCategory) {
contact.bodyB.node!.removeFromParent()
print("COLLISION")
}
しかし、私はそう今までに何任意の検出が届かない何らかの理由で。私は自分の "Floor"クラスを、objectCategory、pointCategory、lifeCategoryの各クラスの "contactTestBitMask"にしました。何が間違っているのですか?私の他の衝突は検出されますが、この衝突は検出されません。
は私がやってみました「ourUnionOfBodies = SKPhysicsBodyをしましょう(体:[!leftWall.physicsBody!rightWall.physicsBody!bottomWall.physicsBody])」と、私は次の行に「ourUnionOfBodies.isDynamic = false」と書いたが、それ以下のことまだ動作しませんか?私は彼らがちょうど – Dewan
@DewanハイDewanを介して右に落ちる衝突検出が表示されません - あまりにも遅れて返信申し訳ありませんが、私は旅行していた。だからあなたは 'ourUnionOfBodies'物理体を作成しました。その物理体を非動的に設定しましたが、Floorオブジェクトの物理体としてこれをどこにでも設定しましたか? 'self.physicsBody?... 'のいずれかを実行する前に' self.physicsBody = 'を実行する必要があります。 'self.physicsBody = SkyphysicsBody(bodies ...')ではなく、物理ボディを保持する別のプロパティを作成した理由は何ですか? –
私はそれを試みましたが、実際には違いはありませんでした。衝突検出が見えません。彼らは私のフロアに落ち続けた – Dewan