5

これを行う方法はないと思いますが、2 つの SKSpriteNode が互いに交差することを検出する方法はありますが、それでも重なり合って、実際には互いに跳ね返らないようにする方法はありますか?

物理ボディなしで 1 を作成し、それらの座標を確認するコードを記述できることはわかっていますが、SK メソッドでこれを検出できるスプライト キットに何かが欠けているのではないかと考えました。

4

1 に答える 1

10

オブジェクトの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プロトコルの実装として宣言する必要もあります。

より多くの参照情報は次のとおりです。

于 2013-12-08T00:36:06.287 に答える