我有一个带有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))];
}
我发现如果我在类的中间设置链的位置,它会在场景中正确旋转。然而,物理关节刚开始在屏幕上随机移动,并且对锚点设置不正确。 (物理关节在场景中设置)
我不知道我是否必须转换坐标或使用随机定位点位置,但如果有人可以放弃一些光线,如果会非常感激。
答案 0 :(得分:0)
你不想使用节点frame
,你想使用节点size
,帧mid是屏幕坐标+拟合节点大小/ 2,你想要你的中间仅限精灵,也适用于pi / 4 M_PI_4