我正在使用 SKSpriteKit 制作钓鱼游戏。我有一个用于钩子和一些鱼的精灵节点(为此我扩展了 SKSpriteNode 类)。理想情况下,鱼被钩住时的行为是鱼的嘴会移动到鱼钩的尖端(使用动作来做到这一点):
CGPoint hp = CGPointMake(self.hook.frame.size.width/2, 0);
CGPoint hookPoint = [self.scene convertPoint:hp fromNode:self.hook];
SKAction *moveAction = [SKAction moveTo:hookPoint duration:.1];
然后鱼会向下旋转一点以模拟挂在钩子上(另一个动作:)
SKAction * flip = [SKAction rotateToAngle:M_PI_4 duration:.1 ];
我认为这样运行这些:
[fish runAction:[SKAction sequence:@[moveAction, flip]]];
这或多或少有效(根据鱼的方向解决扭结)
我后来想做的是在鱼和鱼钩之间创建一个关节,所以如果我移动鱼钩并且它已经钓到了一条鱼,鱼就会跟着一起走。
我这样做:
SKPhysicsJointFixed *joint =
[SKPhysicsJointFixed jointWithBodyA:self.hook.physicsBody
bodyB:fish.physicsBody
anchor:hookPoint];
SKAction *createJoint = [SKAction runBlock:^{
[self.physicsWorld addJoint:joint];}];
[self.scene runAction:createJoint];
如果我在没有关节的情况下运行代码,鱼会留在钩子上并旋转。但是,一旦创建了关节并运行了动作,就不会调用来自上方的旋转动作(尽管会移动到钩子)。
我一点也不知道为什么会发生这种情况。有人有任何指示吗?