我的屏幕底部有一个物体可以通过倾斜设备来倾斜。它可以被掉落的物体随机掉落,当发生这种情况时,它会显示“Game Over!”。但是,如果它碰到墙壁(如下面的代码所示),它将显示“游戏结束!”消息也是。我怎样才能解决这个问题?我希望它能够在没有任何事情发生的情况下撞墙。 (我还将为联系代表添加当前代码。)
墙壁代码:
//Left Wall
SKNode *node = [SKNode node];
node.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(0.0f, 0.0f, 1.0f, CGRectGetHeight(self.frame))];
[self addChild:node];
// Right wall
node = [SKNode node];
node.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(CGRectGetWidth(self.frame) - 1.0f, 0.0f, 1.0f, CGRectGetHeight(self.view.frame))];
[self addChild:node];
联系代表的代码:
#pragma mark contact delegate
- (void)didBeginContact:(SKPhysicsContact *)contact {
//Create two physics body objects
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else {
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if ((firstBody.categoryBitMask & dodgerCategory) != 0) {
[secondBody.node removeFromParent];
self.takenHits++;
}if (self.takenHits >= 1) {
//Game Over
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Game Over."
message:@"You have been hit!" delegate:self
cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
self.paused = YES;
}
}
答案 0 :(得分:1)
您需要将墙的contactTestBitMask
设置为零,以便不测试其与其他对象的接触(或者如果您要设置要使用特定对象测试的所需位)需要)
node.physicsBody.contactTestBitMask = 0;
为两个墙节点设置它。
为了使球与墙壁碰撞,将其碰撞障碍物设置为属性类别:
ballNode.categoryBitMask = <Ball category bit>
ballNode.collisionBitMask = <wall category bit>
leftWallNode.categoryBitMask = <wall category bit>
leftWallNode.collisionBitMask = <ball category bit>
rightWallNode.categoryBitMask = <wall category bit>
rightWallNode.collisionBitMask = <ball category bit>
简而言之,categoryBitMask
定义&#34;我属于哪个类别&#34;在物理世界中collisionBitMask
定义&#34;我可以在物理世界中与哪些类别碰撞&#34;
如果您在定义位时遇到问题请告诉我(使用0x01,0x02,0x04,0x08等...)