我有另一个问题。我有SKSpriteNode aktualniBlock,这里是初始化代码:
-(SKSpriteNode *)createBlock
{
SKSpriteNode *blok = [[SKSpriteNode alloc]init];
SKSpriteNode *square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(45, 0);
[blok addChild:square];
square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(15, 0);
[blok addChild:square];
square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(30, 0);
[blok addChild:square];
square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(0, 0);
[blok addChild:square];
square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(45, 15);
[blok addChild:square];
CGRect rect = [blok calculateAccumulatedFrame];
blok.size = CGSizeMake(rect.size.width, rect.size.height);
return blok;
}
当我点击它时,它会旋转90度:
-(void)tap:(UIGestureRecognizer *)gestureRecognizer
{
[aktualniBlok setZRotation:aktualniBlok.zRotation+1.571];
}
但它的旋转点不在块的中间,而是在块的左下角。如何将其置于块的中间位置。我试过了anchorPoint,但它没有用。谢谢你的帮助。
答案 0 :(得分:1)
您需要为anchorPoint
节点设置blok
属性。
在致电calculateAccumulatedFrame
后设置此行:
CGRect rect = [blok calculateAccumulatedFrame];
blok.size = CGSizeMake(rect.size.width, rect.size.height);
blok.anchorPoint = CGPointMake(0.5, 0.5);
您可以阅读anchorPoint
属性here。
此外,为了设置轮播,使用M_PI_2
代替1.571
会为您提供更准确的值。
答案 1 :(得分:0)
SKSprites的AnchorPoint默认为他们的中心点。
[aktualniBlok setZRotation:aktualniBlok.zRotation+M_PI_2];
代码可以满足你的需要(相对于它的中心改变旋转),但是如果你想改变每个红色方块相对于它们的中心点的旋转,你应该尝试;
[square setZRotation:square.zRotation+M_PI_2];
答案 2 :(得分:0)
你的俄罗斯方块片不会绕左下角旋转。它在(0,0)处围绕块的中心旋转。要围绕工件的中心旋转,请从每个块的x位置减去22.5。我修改了你的代码,使这个部分围绕它的中心旋转。
- (SKSpriteNode *) createBlock
{
SKSpriteNode *blok = [[SKSpriteNode alloc]init];
SKSpriteNode *square;
for (int i=0;i<4;i++) {
CGFloat x = i*15-22.5;
square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(x, 0);
[blok addChild:square];
}
square = [SKSpriteNode spriteNodeWithImageNamed:@"Red Square"];
square.position = CGPointMake(22.5, 15);
[blok addChild:square];
CGRect rect = [blok calculateAccumulatedFrame];
blok.size = CGSizeMake(rect.size.width, rect.size.height);
return blok;
}