【发布时间】:2014-12-11 05:29:54
【问题描述】:
我正在尝试创建一个复杂的 SKPhysicsBody,它不会在顶部弹跳,但允许在侧面和底部弹跳。目前我正在创建两个节点。一个有 Sprite 的图像并且顶部有一个无恢复的 PhysicsBody。
我的第二个节点与第一个节点匹配,但与第一个节点大小相同,它只是在正面和底部有一个 PhysicsBody 并具有恢复原状。让我的主角从底部和正面反弹。
这是我当前设置的代码:
//This is the top part.
- (void)nodePhysicsBodySetup:(SKSpriteNode *)node
{
CGPoint topStart = CGPointMake(0, node.size.height);
CGPoint topEnd = CGPointMake(node.size.width, node.size.height);
SKPhysicsBody *topEdge = [SKPhysicsBody bodyWithEdgeFromPoint:topStart toPoint:topEnd];
node.physicsBody = topEdge;
//[SKPhysicsBody bodyWithBodies:@[topEdge, frontEdge, bottomEdge]]
//node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.frame.size];
node.physicsBody.dynamic = NO;
node.physicsBody.restitution = 0.0;
node.physicsBody.affectedByGravity = NO;
node.physicsBody.categoryBitMask = groundCategory;
node.physicsBody.collisionBitMask = mainHeroCategory;
node.physicsBody.contactTestBitMask = mainHeroCategory;
}
//This is the bottom physicsbody that matches up with the image of the main node.
- (void)bottomNodePhysicsBodySetup:(SKSpriteNode *)node
{
CGPoint topStart = CGPointMake(0, node.size.height);
CGPoint frontEnd = CGPointMake(0,0);
CGPoint bottomEnd = CGPointMake(node.size.width,0);
SKPhysicsBody *frontEdge = [SKPhysicsBody bodyWithEdgeFromPoint:topStart toPoint:frontEnd];
SKPhysicsBody *bottomEdge = [SKPhysicsBody bodyWithEdgeFromPoint:frontEnd toPoint:bottomEnd];
bottomNode.physicsBody = [SKPhysicsBody bodyWithBodies:@[frontEdge, bottomEdge]];
bottomNode.physicsBody.dynamic = NO;
bottomNode.physicsBody.affectedByGravity = NO;
bottomNode.physicsBody.restitution = 0.5;
bottomNode.physicsBody.categoryBitMask = otherCategory;
bottomNode.physicsBody.collisionBitMask = mainHeroCategory;
bottomNode.physicsBody.contactTestBitMask = mainHeroCategory;
}
图片为 NDA 下的截图:
目前,绿色PhysicsBody附加到节点,红色PhysicsBody附加到与第一个节点位置相同的透明第二个节点。
这实际上不起作用。我的主要角色(mainHeroCategory)有时会卡在节点角上,即有恢复的物理体和没有相遇的物理体。有什么更好的方法来做到这一点?
【问题讨论】:
标签: ios sprite-kit skspritenode skphysicsbody