Ios7 为什么我的SKPhysics关节不工作?

Ios7 为什么我的SKPhysics关节不工作?,ios7,sprite-kit,skspritenode,Ios7,Sprite Kit,Skspritenode,我有一条SKSpriteNode鱼和一个延伸的SKSpriteNode级鱼钩;我试图在它们接触时将它们连接在一起,然后让它们一起移动。我正在使用以下代码: [fish removeAllActions]; NSLog(@"Fish anchor is is (%f,%f)", fish.anchorPoint.x, fish.anchorPoint.y); CGPoint hp = CGPointMake(self.hook.frame.size.width/2, 0); fish.anch

我有一条SKSpriteNode鱼和一个延伸的SKSpriteNode级鱼钩;我试图在它们接触时将它们连接在一起,然后让它们一起移动。我正在使用以下代码:

[fish removeAllActions];
NSLog(@"Fish anchor is is (%f,%f)", fish.anchorPoint.x, fish.anchorPoint.y);

CGPoint hp = CGPointMake(self.hook.frame.size.width/2, 0);

fish.anchorPoint = CGPointMake(1, .5);

CGPoint hookPoint = [self.scene convertPoint:hp fromNode:self.hook];
NSLog(@"Current fish position  is (%f,%f)", fish.position.x, fish.position.y);

NSLog(@"Hook point is (%f,%f)", hookPoint.x, hookPoint.y);

SKAction *moveAction = [SKAction moveTo:hookPoint duration:.1];

SKAction * flip;
if (fish.direction)  //if going to the right, then turn -90 degrees
    flip = [SKAction  rotateToAngle:M_PI_4 duration:.1 ];
else
    flip = [SKAction  rotateToAngle:(-M_PI_2) duration:.1 ];

//[fish runAction:moveAction];
[fish runAction:[SKAction sequence:@[moveAction, flip]]];

SKPhysicsJointFixed *joint =
            [SKPhysicsJointFixed jointWithBodyA:self.hook.physicsBody
                                          bodyB:fish.physicsBody
                                         anchor:hookPoint];



[self.physicsWorld addJoint:joint];
NSLog(@"Joined");
我把鱼设计成这样:

self.anchorPoint = CGPointMake(1, .05);
[self setFishSize:[self getRandomSize]];
self.xScale *= .3;
self.yScale *= .3;    
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size]; // 1
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = hookCategory;
self.physicsBody.categoryBitMask = fishCategory;
self.physicsBody.usesPreciseCollisionDetection = true;
    _hook = [SKSpriteNode spriteNodeWithImageNamed:@"hook"];
    _hook.anchorPoint = CGPointMake(.5, 0);


    _hook.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_hook.frame.size];

    _hook.position = CGPointMake(100, self.frame.size.height - self.hook.size.height/2);
    _hook.physicsBody.dynamic = YES;
    _hook.physicsBody.categoryBitMask = hookCategory;
    _hook.physicsBody.contactTestBitMask = fishCategory;
    _hook.physicsBody.collisionBitMask = 0;
    _hook.physicsBody.usesPreciseCollisionDetection = YES;
    _hook.physicsBody.affectedByGravity = false;
    _hook.physicsBody.allowsRotation = false;
    self.physicsWorld.gravity = CGVectorMake(0,0);
    self.physicsWorld.contactDelegate = self;
以及钩子本身:

self.anchorPoint = CGPointMake(1, .05);
[self setFishSize:[self getRandomSize]];
self.xScale *= .3;
self.yScale *= .3;    
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size]; // 1
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = hookCategory;
self.physicsBody.categoryBitMask = fishCategory;
self.physicsBody.usesPreciseCollisionDetection = true;
    _hook = [SKSpriteNode spriteNodeWithImageNamed:@"hook"];
    _hook.anchorPoint = CGPointMake(.5, 0);


    _hook.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_hook.frame.size];

    _hook.position = CGPointMake(100, self.frame.size.height - self.hook.size.height/2);
    _hook.physicsBody.dynamic = YES;
    _hook.physicsBody.categoryBitMask = hookCategory;
    _hook.physicsBody.contactTestBitMask = fishCategory;
    _hook.physicsBody.collisionBitMask = 0;
    _hook.physicsBody.usesPreciseCollisionDetection = YES;
    _hook.physicsBody.affectedByGravity = false;
    _hook.physicsBody.allowsRotation = false;
    self.physicsWorld.gravity = CGVectorMake(0,0);
    self.physicsWorld.contactDelegate = self;
然而,当它们结合在一起时,我移动鱼钩,鱼就不会出现了。 我犯了什么明显的错误吗


非常感谢您的帮助

你应该在动作块中形成关节, 我建议这样做

 SKPhysicsJointFixed *joint = [SKPhysicsJointFixed jointWithBodyA:self.hook.physicsBody bodyB:fish.physicsBody anchor:hookPoint];

 SKAction *createJoint = [SKAction runBlock:^{   
 [self.physicsWorld addJoint:joint];}]

 // run this action when the condition is met
 [fish runAction:[SKAction createJoint]];

此外,我还看到您正在使用大量的碰撞自定义(例如碰撞组、旋转限制等)。我建议您使用最小值(或非最小值)开始并开始工作,然后逐个添加自定义项以确保一切正常。

谢谢,我会尝试一下。通常添加动作与通过动作块执行动作有什么区别?这样,您还可以使用动作分离并移除关节,使其再次自由。因为我假设鱼钩仍然存在,但是鱼需要从鱼钩上分离出来,然后放到篮子里或者别的什么地方。