从中心缩放SKShapeNode?

时间:2013-10-04 03:07:00

标签: sprite-kit

我有一个SKShapeNode,以及一个通用SKNode下的标签。如果我尝试缩放该节点,其位置将无缘无故地改变!如果我尝试仅缩放它下面包含的节点,它会正确缩放,但不能从中心缩放,因此它会向上和向右扩展。

我做错了什么? 首先是规模 First before scale

规模之后 After scale

注意它的位置向上移动。无法弄清楚为什么,即使我把它作为一个行动也不行。此外,位置不会根据日志而改变,但看起来框架变大了(虽然这是预期的)

重新创建问题的步骤:

设置高度和宽度 @h = 50 @w = 256

创建高度和宽度的rect CGRectMake(0,0,@ w,@ h)

获取rect的路径 UIBezierPath.bezierPathWithRect(rect).CGPath

使用路径创建skshape节点,设置位置

  antialiased: false,
  lineWidth: 1.0,
  strokeColor: SKColor.blackColor,
  fillColor: SKColor.whiteColor

创建sklabel,垂直居中对齐,设置位置

创建通用SKNode,没有属性,将skshapenode和sklabel添加为子项

缩放通用SKNode。

2 个答案:

答案 0 :(得分:0)

试试这个

SKLabelNode *labNode = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
labNode.fontSize = 12.0f;
labNode.fontColor = [SKColor blackColor];
labNode.text = @"SMASH";


SKSpriteNode *topWithText = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(100, 30)];
topWithText.position = CGPointMake(100, 110);
[topWithText addChild:labNode];

SKSpriteNode *bottom = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(100, 10)];
bottom.position = CGPointMake(100, 100);

[self addChild:topWithText];
[self addChild:bottom];

[topWithText runAction:[SKAction sequence:@[
                                      [SKAction waitForDuration:3.0],
                                      [SKAction scaleBy:3.0 duration:3]
                                      ]]];

答案 1 :(得分:0)

我遇到了类似的问题:我创建了一个SKShapeNode.ellipseInRect,当我不需要缩放它时,它看起来很完美。然而,当我试图将其缩小以适应它背后的文本时,它将随机缩小到屏幕的左下角!

我进行了一些调试,令我感到惊讶的是,即使椭圆位于屏幕的左上角,位置设置为(0,0)!然后我意识到通过使用rect初始化“锚点”(即使SKShapeNodes在技术上没有它们)也是(0,0)。这种行为可以解释我在这一点上的萎缩以及你从那一点上的成长。

对我来说解决这个问题的不是把我的位置放在矩形中,而是在之后设置位置。然后它围绕我的节点的中心点而不是屏幕原点进行缩放。希望有所帮助!