У меня есть рыба SKSpriteNode и расширенный крюк класса SKSpriteNode; Я пытаюсь объединить их вместе, когда они вступают в контакт, а затем они перемещаются вместе. Я использую этот код:Почему мои SKPhysicsJoints не работают?
[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;
и все же, когда они соединяются, и я переместите крючок, рыба не придет. Есть ли какие-то вопиющие ошибки, которые я делаю?
Любая помощь очень ценится.
спасибо, я попробую это. В чем разница между добавлением действия обычно, а не с помощью блока действий? – marina
Таким образом вы также можете отсоединить и удалить сустав с помощью действия, чтобы он снова освободился. Так как я предполагаю, что крюк остается, но рыба должна отсоединиться от крючка и пойти в корзину или что-то еще. – user2421700