2

プレーヤー、障害物、コインで構成される比較的単純なゲームを作成しています。私の目標は、障害物とプレイヤーの間だけで衝突し、プレイヤーとコインの間の接触がトリガーされるようにすることdidBeginContactです。

ここにいくつかのコードがあります:

//declare categoryBitMasks
struct physicsCategories {
    static let playerCategory : UInt32 = 1
    static let coinCategory: UInt32 = 2
    static let obstacleCategory : UInt32 = 3 
}

//assign physics categories 
playerNode!.physicsBody?.categoryBitMask = physicsCategories.playerCategory
playerNode!.physicsBody?.collisionBitMask = physicsCategories.obstacleCategory
playerNode!.physicsBody?.contactTestBitMask = physicsCategories.coinCategory


obstacleNode.physicsBody?.categoryBitMask = physicsCategories.obstacleCategory
obstacleNode.physicsBody?.collisionBitMask = physicsCategories.playerCategory
obstacleNode.physicsBody?.contactTestBitMask = 0


coinNode.physicsBody?.categoryBitMask = physicsCategories.coinCategory
coinNode.physicsBody?.collisionBitMask = 0
coinNode.physicsBody?.contactTestBitMask = physicsCategories.playerCategory

このdidBeginContact関数は、ビューからコインを削除し、ユーザーの通貨銀行にコインを追加します。この関数は、プレーヤーがコインを叩いたときに呼び出されますが、コインが取り除かれる前に衝突が発生します。衝突はゲームプレイを非常に混乱させ、有効な解決策を見つけることができませんでした。助言がありますか?

4

1 に答える 1

1

問題はカテゴリです。ビット マスクがどのように機能するかを検索してください。1,2,3 はできません。2 の累乗でなければなりません。0x1 << 0、0x1 << 1、0x1 << 2 など

于 2016-01-25T02:34:36.693 に答える