ios - 为什么这个 SKPhysicsJointPin 不能将这两个 Sprite 放在一起?

标签 ios sprite-kit skphysicsbody

我显然不太了解 SKPhysicsJoint,但网上的信息还很少,当然除了 Apple 文档之外。下面的代码有什么问题,我认为它应该使头部和颈部永久连接在一起——我的意图是它们就像两张带别针的纸,这样它们就可以稍微旋转一下,而不是完全分开.当我运行这段代码时,它们掉到它们所在的 SKScene 的底部,撞到地面,然后头从 body 上掉下来。

也许关节没有随着它们移动或其他什么,它只是在它们移动时保持原位??

self.head = [SKSpriteNode spriteNodeWithImageNamed:@"head.png"];
self.head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.head.size];
self.head.physicsBody.mass = 0.05;
self.head.physicsBody.dynamic = YES;

self.chest = [SKSpriteNode spriteNodeWithImageNamed:@"chest_neck"];
self.chest.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.chest.size];
self.chest.physicsBody.mass = 0.05;
self.chest.physicsBody.dynamic = YES;

self.leftLeg = [SKSpriteNode spriteNodeWithImageNamed:@"left_leg"];
self.leftLeg.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.leftLeg.size];
self.leftLeg.physicsBody.mass = 10;
self.leftLeg.physicsBody.dynamic = YES;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    self.head.position = CGPointMake(282, 220);
    self.chest.position = CGPointMake(282, 130);
    self.leftLeg.position = CGPointMake(282, 10);

} else {
    self.head.position = CGPointMake(512, 380);
    self.chest.position = CGPointMake(512, 290);
    self.leftLeg.position = CGPointMake(512, 10);

}



[self addChild:self.head];
[self addChild:self.chest];
[self addChild:self.leftLeg];


self.chestJointPinAnchor = CGPointMake(self.chest.position.x, self.chest.position.y+39);
self.chestJointPin = [SKPhysicsJointPin jointWithBodyA:self.head.physicsBody bodyB:self.chest.physicsBody anchor:self.chestJointPinAnchor];
[self.physicsWorld addJoint:self.chestJointPin];

最佳答案

这是因为您在设置 Sprite 的physicsBody 属性后设置 Sprite 的位置。 我没有在文档中发现任何提及,但上周末我试图弄清楚为什么我手动创建的绳索有效,但递归地却没有。 SpriteNodes 的位置必须在 physicsBody 之前设置。 因此,只需像这样重新排序您的代码:

self.head = [SKSpriteNode spriteNodeWithImageNamed:@"head.png"];
self.chest = [SKSpriteNode spriteNodeWithImageNamed:@"chest_neck"];
self.leftLeg = [SKSpriteNode spriteNodeWithImageNamed:@"left_leg"];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    self.head.position = CGPointMake(282, 220);
    self.chest.position = CGPointMake(282, 130);
    self.leftLeg.position = CGPointMake(282, 10);

} else {
    self.head.position = CGPointMake(512, 380);
    self.chest.position = CGPointMake(512, 290);
    self.leftLeg.position = CGPointMake(512, 10);

self.head.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.head.size];
self.head.physicsBody.mass = 0.05;
self.head.physicsBody.dynamic = YES;

self.chest.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.chest.size];
self.chest.physicsBody.mass = 0.05;
self.chest.physicsBody.dynamic = YES;

self.leftLeg.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.leftLeg.size];
self.leftLeg.physicsBody.mass = 10;
self.leftLeg.physicsBody.dynamic = YES;


}

哦,我注意到了,你已经自己找到了答案......那你能不能把你的问题标记为已回答。

关于ios - 为什么这个 SKPhysicsJointPin 不能将这两个 Sprite 放在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666719/

相关文章:

ios - 为什么 applicationWillResignActive 方法不起作用?

ios - 比较字符串的问题

ios - 我将如何使用 SpriteKit 构建台球杆/简化的弹球式柱塞?

Swift SpriteKit 基本接触/碰撞

ios - NSDate formatString 有时返回 nil

iOS AVPlayer : pause video when screen locks

ios - 静态 UITableViewCell 在 CellForRowAtIndexPath 上返回 nil,但仅限于某些部分

iOS - 通过系统获取媒体库访问警报的回调

swift - SpriteKit。为什么 .StrokeTexture 不适用于 SKShapeNode?

ios - Sprite Kit - 将 body 滑过其他人