【问题标题】:SpriteKit: How to create Basic Physics JointsSpriteKit:如何创建基本物理关节
【发布时间】:2013-10-13 09:00:12
【问题描述】:

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

例如,这是在矩形上附加一个小正方形后的固定关节结果。

-(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

谢谢。

【问题讨论】:

标签: objective-c ios7 physics sprite-kit skphysicsbody


【解决方案1】:

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

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

当我在设置 Sprite 的物理体之前设置 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

【讨论】:

  • 这是 iOS 7.0.x 中的一个错误,已在 7.1 中修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多