我有一个SKShapeNode,以及一个通用SKNode下的标签。如果我尝试缩放该节点,其位置将无缘无故地改变!如果我尝试仅缩放它下面包含的节点,它会正确缩放,但不能从中心缩放,因此它会向上和向右扩展。
我做错了什么? 首先是规模
规模之后
注意它的位置向上移动。无法弄清楚为什么,即使我把它作为一个行动也不行。此外,位置不会根据日志而改变,但看起来框架变大了(虽然这是预期的)
重新创建问题的步骤:
设置高度和宽度 @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。
答案 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)。这种行为可以解释我在这一点上的萎缩以及你从那一点上的成长。
对我来说解决这个问题的不是把我的位置放在矩形中,而是在之后设置位置。然后它围绕我的节点的中心点而不是屏幕原点进行缩放。希望有所帮助!