SpriteKit:如何创建基本物理联合体

11

我正在尝试在两个SKPhysicsBody之间创建简单的关节,但它们的行为很奇怪。 我非常清楚锚点应该在场景坐标上。请查看附加的源代码。

例如,将小正方形附加到矩形上后,这就是固定关节的结果。

-(void)createFixedJointOnScene:(SKScene*)scene

{

//Adding Rectangle

    SKSpriteNode* backBone = [[SKSpriteNode alloc] initWithColor:[UIColor whiteColor] size:CGSizeMake(20, 200)];
backBone.position = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
backBone.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:backBone.size];
backBone.physicsBody.categoryBitMask = GFPhysicsCategoryRectangle;
backBone.physicsBody.collisionBitMask = GFPhysicsCategoryWorld;
[scene addChild:backBone];

//Adding Square
SKSpriteNode* head = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(40, 40)];
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];
head.position = CGPointMake(backBone.position.x, backBone.position.y-40);
head.physicsBody.categoryBitMask = GFPhysicsCategorySquare;
head.physicsBody.collisionBitMask = GFPhysicsCategoryWorld;
[scene addChild:head];

//Pinning Rectangle and Square
NSLog(@"Head position %@", NSStringFromCGPoint(head.position));
SKPhysicsJointFixed* pin =[SKPhysicsJointFixed jointWithBodyA:backBone.physicsBody bodyB:head.physicsBody anchor:head.position];
[self.physicsWorld addJoint:pin];

}

这里输入图片描述

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest.zip

谢谢。


1
请检查我的示例,链接在这里:https://dev59.com/wXfZa4cB1Zd3GeqPXuod - DogCoffee
@Bavan:我已经使用了你的代码来连接两个SpriteNode。但它改变了我的SpriteNode的位置。你能帮帮我吗? - Nirav
1个回答

13

谢谢Smick。与我的代码比较后,我发现这两行的顺序导致了问题。

head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];
head.position = CGPointMake(backBone.position.x, backBone.position.y-40);

当我在设置Sprite的物理体之前设置其位置时,一切开始正常工作。

head.position = CGPointMake(backBone.position.x, backBone.position.y-40);
head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:head.size];

现在我已经将Smick的代码附加到完整代码中,并在下面附上了链接。请享用。

https://dl.dropboxusercontent.com/u/62559842/PhysicsTest_Final_Working.zip


1
这是iOS 7.0.x中的一个错误,在7.1中已经修复。 - 0x141E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接