0
我有兩個精靈,我的玩家和一個碰撞的牆(來自一個地圖)。下面我粘貼代碼爲球員和牆壁碰撞未被檢測到
Player.m
- (instancetype)init {
SKTextureAtlas *atlas =
[SKTextureAtlas atlasNamed: @"char"];
SKTexture *texture = [atlas textureNamed:@"player"]; texture.filteringMode = SKTextureFilteringNearest;
if (self = [super initWithTexture:texture])
{ self.name = @"player";
CGFloat minDiam = MIN(self.size.width, self.size.height);
minDiam = MAX(minDiam-16, 4);
self.physicsBody =
[SKPhysicsBody bodyWithCircleOfRadius:minDiam/2.0];
self.physicsBody.categoryBitMask=PCPlayerCategory;
self.physicsBody.collisionBitMask =
PCWallCategory;
self.physicsBody.allowsRotation = NO;
self.physicsBody.restitution = 0;
self.physicsBody.friction = 0;
self.physicsBody.linearDamping = 0;
}
return self;
}
tilemap.m
SKSpriteNode *tile = [layer tileAtCoord:coord];
[email protected]"wall";
tile.physicsBody =
[SKPhysicsBody bodyWithRectangleOfSize:tile.size];
tile.physicsBody.categoryBitMask = PCWallCategory;
tile.physicsBody.collisionBitMask =
PCPlayerCategory;
tile.physicsBody.dynamic = NO;
tile.physicsBody.friction = 0;
tile.physicsBody.restitution=0;
在我mainscene.m
- (void)didBeginContact:(SKPhysicsContact *)contact {
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (PCWallCategory|PCPlayerCategory)) {
NSLog(@"SUCCESS"); }
然而,即使我的球員坐在我牆我沒有看到NSLog顯示,希望得到一些幫助和洞察到這個請。 謝謝
- (void)didBeginContact:(SKPhysicsContact *)contact {
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (PCWallCategory|PCPlayerCategory)) {
NSLog(@"SUCCESS");
onGround=YES;
}else
{
onGround=NO;
}
}
不正確使用的categoryBitMask ... http://stackoverflow.com/a/22804376/201863 – LearnCocos2D
取而代之的是collisionBitMask的,你需要使用相同的值設置contactTestBitMask。 – ZeMoon
@ LearnCocos2D感謝您的閱讀,它解決了我的問題 –