SKShapeNode не поддерживает центральное положение при применении масштаба

Я начинаю разрабатывать игру, и через мгновение мне нужно показать круг, который увеличивает свой размер, я понял, но проблема в том, что он увеличивает свой размер и меняет свое положение и, наконец, исчезает с экрана. Я хочу, чтобы он оставался в исходном положении и увеличивал свой размер от начального центра.

Мой код следующий:

CGRect circle = CGRectMake(skRand(0, self.size.width), skRand(0, self.size.height), 20, 20);
SKShapeNode *shapeNode = [[SKShapeNode alloc] init];
shapeNode.position = CGPointMake(skRand(0, self.size.width), skRand(0, self.size.height));
shapeNode.path = [UIBezierPath bezierPathWithOvalInRect:circle].CGPath;
shapeNode.fillColor = [SKColor blueColor];
shapeNode.strokeColor = nil;
[self addChild:shapeNode];
SKAction* zoom = [SKAction scaleTo:15.0 duration:10.0];
[shapeNode runAction:zoom];

Есть идеи?

Чем вам очень!


person diegomen    schedule 16.03.2014    source источник


Ответы (1)


Если вы хотите, чтобы ваш круг увеличивался в размере от центра, попробуйте построить круг не с помощью CGRectMake, а вместо этого используйте CGMutablePathRef, сделайте путь и установите путь круга на тот, который вы создали. У меня есть что-то подобное в моей игре, и это сработало для меня:

SKShapeNode *turnSphere = [[SKShapeNode alloc] init];
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddArc(path, NULL, 0, 0, 30, 0.0, (2 * M_PI), NO);
    turnSphere.path = path;
    turnSphere.position = CGPointMake(220, 440);
[self addChild:turnSphere];

    [turnSphere runAction:[SKAction scaleBy:3 duration:2]];

Теперь круг должен увеличиваться от центра. Надеюсь, это сработает!

person romsearcher    schedule 16.03.2014
comment
Сработало идеально!!! большое спасибо! так в чем разница между использованием CGRectMake и CGMutablePathRef? Я хочу хорошо понять решение :) еще раз спасибо! - person diegomen; 17.03.2014
comment
Я рад, что это сработало! Используя CGMutablePathRef, вы указываете, что окружность начинается из центра, тогда как с помощью CGRect вы создаете прямоугольник, который начинается с указанных вами координат x и y, а затем расширяется наружу. Это похоже на концепцию anchorPoint узлов, я думаю, что документация Apple объясняет это лучше: link ура! - person romsearcher; 17.03.2014
comment
да, я это читал и пытаюсь модифицировать anchorPoint, но ничего не добился... большое спасибо!! - person diegomen; 17.03.2014