我正在尝试创建一个复杂的SKPhysicsBody,它不会在顶部弹跳,但允许在侧面和底部弹跳。目前我正在创建两个节点。一个有精灵形象的人,顶部没有恢复原状的物理身体。
我的第二个节点与第一个节点匹配,但是与第一个节点的大小相同它在前面和底部只有一个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下:
目前,Green PhysicsBody附加到节点,红色PhysicsBody附加到透明的第二个节点,其位置与第一个节点相同。
这不起作用。我的主要角色(mainHeroCategory)有时会卡在具有恢复原状的PhysicsBody和没有相遇的物理角上。有什么更好的方法呢?
答案 0 :(得分:0)
我会尝试仅使用一个物理主体来执行此操作,并查看联系委托方法以确定联系发生的位置以及法线向量(该信息位于委托方法中传递的SKPhysicsContact对象中)。
获得该信息后,我会对mainHeroCategory对象施加冲动,具体取决于联系发生的位置。
答案 1 :(得分:0)
我建议您使用SKPhysicsJointFixed加入物理机构,或者使用SKConstraint或两个约束身体。 SpriteKit仅在使用bodyWithBodies
合并两个或多个实体时才使用该形状。来自文档...
忽略子项上的属性,例如质量或摩擦力。 只使用子体的形状。
忽略restitution
属性。