これを行う方法はないと思いますが、2 つの SKSpriteNode が互いに交差することを検出する方法はありますが、それでも重なり合って、実際には互いに跳ね返らないようにする方法はありますか?
物理ボディなしで 1 を作成し、それらの座標を確認するコードを記述できることはわかっていますが、SK メソッドでこれを検出できるスプライト キットに何かが欠けているのではないかと考えました。
これを行う方法はないと思いますが、2 つの SKSpriteNode が互いに交差することを検出する方法はありますが、それでも重なり合って、実際には互いに跳ね返らないようにする方法はありますか?
物理ボディなしで 1 を作成し、それらの座標を確認するコードを記述できることはわかっていますが、SK メソッドでこれを検出できるスプライト キットに何かが欠けているのではないかと考えました。
オブジェクトのcontactDelegate
プロパティを使用できます。SKPhysicsWorld
// inside your header file
typedef NS_OPTIONS(NSUInteger, CollisionCategory) {
categoryOne = (1 << 0),
categoryTwo = (1 << 1)
};
// inside your SKScene sub-class implementation
- (void)setupContactDelegate {
self.physicsWorld.contactDelegate = self;
nodeA.categoryBitMask = categoryOne; // nodeA is category one
nodeA.collisionBitMask = ~categoryTwo; // nodeA does not collide w/ category two
nodeA.contactTestBitMask = categoryTwo; // nodeA tests for contacts w/ category two
nodeB.categoryBitMask = categoryTwo; // nodeB is category two
nodeB.collisionBitMask = ~categoryOne; // nodeB does not collide w/ category one
nodeB.contactTestBitMask = categoryOne; // nodeB tests for contacts w/ category one
}
- (void)didBeginContact:(SKPhysicsContact *)contact {
// do whatever you need to do when the contact begins
}
- (void)didEndContact:(SKPhysicsContact *)contact {
// do whatever you need to do when the contact ends
}
SKScene
サブクラスをSKPhysicsContactDelegate
プロトコルの実装として宣言する必要もあります。
より多くの参照情報は次のとおりです。