2014年11月29日

SpriteKitの衝突判定処理でのノードの順序(改訂版)

SpriteKitでは、物理体はcontactTestBitMaskを設定しておけば衝突時に-didBeginContact:が呼ばれる。だが、bodyAとbodyBにはどちらの物理体が設定されているかは不定なので、毎回冗長な判定処理をかかないといけない。

というのを昨日書いたが、よく考えればSKPhysicsContactのメセッドにしたほうが使い回しが効くので書き換えた。英語が苦手なので名前が適切かどうかはよくわからない。


@interface SKPhysicsContact (Compare)
-(BOOL)contactsWithName:(NSString *)firstName
and:(NSString *)secondName;
- (void)orderdBodyA:(SKPhysicsBody**)bodyA
bodyB:(SKPhysicsBody**)bodyB;
@end

@implementation SKPhysicsContact (Compare)

-(BOOL)contactsWithName:(NSString *)firstName
and:(NSString *)secondName
{
if ([self.bodyA.node.name isEqualToString:firstName]) {
if ([self.bodyB.node.name isEqualToString:secondName]) {
return YES;
}
} else if ([self.bodyB.node.name isEqualToString:firstName]) {
if ([self.bodyA.node.name isEqualToString:secondName]) {
return YES;
}
}
return NO;
}

- (void)orderdBodyA:(SKPhysicsBody**)bodyA
bodyB:(SKPhysicsBody**)bodyB
{
if ( !bodyA || !bodyB ) return;
if ( self.bodyA.categoryBitMask > self.bodyB.categoryBitMask ) {
*bodyA = self.bodyA;
*bodyB = self.bodyB;
} else {
*bodyA = self.bodyB;
*bodyB = self.bodyA;
}
}

@end
posted by 永遠製作所 at 00:57| 東京 ☁| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/409750958
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック