【发布时间】:2014-05-15 21:05:23
【问题描述】:
我有两个精灵,我的玩家和一堵墙(来自瓷砖地图)发生碰撞。下面我粘贴了播放器和墙的代码
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];
tile.name=@"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使用不正确...stackoverflow.com/a/22804376/201863
-
您需要使用相同的值设置contactTestBitMask,而不是collisionBitMask。
-
@LearnCocos2D 感谢阅读它解决了我的问题
标签: xcode5 sprite-kit