8

過去 2 日間、2 つの SKSpriteNode に衝突を登録させてdidBegin#contact.

両方のオブジェクトにビット マスク ' categoryBitMask'、' contactTestBitMask' および ' ' を設定しました。collisionTestBitMask

また、両方の ' 'dynamicプロパティを' 'に設定しましたtrue

initPhysics()物理ワールドを正常にセットアップしているようです。

私が期待しているのはdidBegin#Contact、それが呼び出されることだけですが、そうではありません

//Set up Physicsbody bit masks
let playerCarBitMask: UInt32 = 0x1 << 1
let slowCarBitMask: UInt32 = 0x1 << 2



//initPhysics
func initPhysics() {
    println("(((((((((((((( Initiating Physicsbody ))))))))))))))")
    self.physicsWorld.contactDelegate = self
    self.physicsWorld.gravity = CGVector.zeroVector

    println("self.physicsWorld.contactDelegate = \(self.physicsWorld.contactDelegate)")

}

//setupPlayer
func setupPlayer() {

    car = SKSpriteNode(imageNamed: "redCarUp")
    car.setScale(2.0)
    car.position = CGPoint(x: 800, y: 400)
    car.zPosition = 100
    car.name = "car"

    gameNode.addChild(car)

    let carBody = SKPhysicsBody(
        rectangleOfSize: car.frame.size, center: car.position)

    carBody.dynamic = true
    carBody.categoryBitMask = playerCarBitMask
    carBody.contactTestBitMask = slowCarBitMask
    carBody.mass = 5
    carBody.collisionBitMask = slowCarBitMask
    car.physicsBody = carBody

    println("carBody = \(carBody)")
    println("carBody.dynamic = \(carBody.dynamic)")
    println("carBody.mass = \(carBody.mass)")
    println("carBody.categoryBitMask = \(carBody.categoryBitMask)")
    println("carBody.contactTestBitMask = \(carBody.contactTestBitMask)")
    println("carBody.collisionBitMask = \(carBody.contactTestBitMask)")



    slowCar = SKSpriteNode(imageNamed: "blueCarUp")
    slowCar.setScale(2.0)
    let slowCarScenePos = CGPoint(
        x: 680,
        y: 2048)


    slowCar.position = gameNode.convertPoint(slowCarScenePos, fromNode: self)
    println("slowCar.position = \(slowCar.position) ****")
    slowCar.zPosition = 80
    slowCar.name = "slowCar"



    let slowCarBody = SKPhysicsBody(
        rectangleOfSize: slowCar.frame.size, center: slowCar.position)


    println("slowCar = \(slowCar) ****")

    slowCarBody.dynamic = true
    slowCarBody.categoryBitMask = slowCarBitMask
    slowCarBody.contactTestBitMask = playerCarBitMask
    slowCarBody.mass = 5
    slowCarBody.collisionBitMask = playerCarBitMask
    slowCar.physicsBody = slowCarBody
    gameNode.addChild(slowCar)



}

func didBeginContact(contact: SKPhysicsContact!) {
    println("*******************PhysicsContact********************")
}
4

4 に答える 4

2

それは単純な問題であることが判明しました。元のコードでは、SKPhysicsBody 検出フレームのパラメーターを次のように設定していました。

let carBody = SKPhysicsBody( rectangleOfSize: car.frame.size, center: car.position)

同様に、物理衝突をテストしていた 2 番目のノードに対しても同じことを行っていました。

次のように「center:」パラメータを削除するだけです。

let carBody = SKPhysicsBody(rectangleOfSize: car.frame.size)

2 つのスプライト ノードが問題を解決し、ノードが互いに衝突し、予想どおりに押しのけられるようになりました。

于 2014-10-19T09:06:48.087 に答える