类中的SpriteNode在Scene中无法正确旋转

时间:2015-12-31 09:49:19

标签: ios objective-c rotation sprite-kit

我有一个带有SpriteNode的Class,它在主场景中旋转时旋转得非常宽(好像锚点位于屏幕中间并且Sprite围绕它旋转)。我想让它围绕主场景中的锚点旋转(Sprite上的锚点)。

所以在课堂上我有类似下面的内容

- (void)createChainWithPos:(CGPoint)pos {
  SKTexture *myTex...
  SKTexture *myTex2...
  SKSpriteNode *chainFront = [SKSpriteNode spriteWithTexture:myTex];
  chainFront.position = pos;
  chainFront.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:mytex.size];
  [self addChild:chainFront];
  [_chainParts addObject:chainFront];

  SKSpriteNode *chainSide = [SKSpriteNode spriteWithTexture:myTex2];
  chainSide.position = CGPointMake(chainFront.position.x, chainFront.position.y - chainSide.size.height + 6);
  chainSide.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:myTex2.size;
  [self addChild:chainSide];
  [_chainParts addObject:chainSide];
}

我有一个循环在主文件中创建链部件但是无法将其旋转,因此在新项目中将其剥离。实际上有4个连锁零件,但我只做了两个。另外两个只是上面镜像的镜像,它们的位置反映了链条的侧面。(将它们放在一个像链子一样的方式)

并在场景中

self.chain1 = [chain node];    
[self.chain1 createChainWithPos:CGPointMake(self.size.width/2, self.size.height/2);
self.chain1.zRotation = 3.14/4;
[self addChild:self.chain1];

我在链类头中有一个NSMutableArray,用于保存链。

物理关节

for (int i = 1; i < self.chain1.chainParts.count; i++ {
    SKSpriteNode *nodeA = [[self.chain1 chainParts]objectAtindex:i-1];
    SKSpriteNode *nodeB = [[self.chain1 chainParts]objectAtindex:i];

    SKPhysicsJointPin *pin = [SKPhysicsJointPin jointWithBodyA:nodeA.physicsBody
                                                         bodyB:nodeB.physicsBody
                                                        anchor:CGPointMake(CGRectGetMidX(nodeA.frame), CGRectGetMinY(nodeA.Frame))];

}

我发现如果我在类的中间设置链的位置,它会在场景中正确旋转。然而,物理关节刚开始在屏幕上随机移动,并且对锚点设置不正确。 (物理关节在场景中设置)

我不知道我是否必须转换坐标或使用随机定位点位置,但如果有人可以放弃一些光线,如果会非常感激。

1 个答案:

答案 0 :(得分:0)

你不想使用节点frame,你想使用节点size,帧mid是屏幕坐标+拟合节点大小/ 2,你想要你的中间仅限精灵,也适用于pi / 4 M_PI_4