SKShapeNode установил SKAction для масштабирования от центра

У меня есть класс Tile, который является подклассом SKShapeNode.

@interface Tile : SKShapeNode

и я создаю экземпляр класса следующим образом:

//  Tile.h
-(instancetype) addHiddenTileToSpace:(NSString *)letter withIndex:(int)i withPositionInWord:(int)p;

В моем файле реализации у меня есть

//  Tile.m
-(instancetype) addHiddenTileToSpace:(NSString *)letter withIndex:(int)i withPositionInWord:(int)p{
if(self == [super init] ){
    self.name = @"Tile";
   // self.hidden = YES;
    if (p == 0) {
        self.firstLetter = YES;
    }
    else{
        self.firstLetter = NO;
    }
    self.positionInAnswer = i;
    self.character = letter;

    [self setPath:CGPathCreateWithRoundedRect(CGRectMake(0, 0, 60, 60), 4, 4, nil)];
    self.strokeColor = self.fillColor = [UIColor colorWithRed:66.0f/255.0f
                                                        green:74.0f/255.0f
                                                         blue:84.0f/255.0f
                                                        alpha:1];
    SKLabelNode *characterNode = [[SKLabelNode alloc] initWithFontNamed:@"Avenir-Medium"];
    characterNode.text = [letter uppercaseString];
    characterNode.fontSize = 40;
    characterNode.fontColor = [UIColor colorWithRed:216.0f/255.0f
                                              green:216.0f/255.0f
                                               blue:216.0f/255.0f
                                              alpha:1];
    characterNode.position = CGPointMake(30, 15);
    [self addChild:characterNode];
}
return self;

}

Проблема в том, что я хочу анимировать/масштабировать этот узел, но он масштабируется от координат (0,0) узла, а не от его центра. Я читал в другом месте, что я должен использовать метод + (instancetype)shapeNodeWithPath:(CGPathRef)path centered:(BOOL)centered и установить центр в YES

Однако в моем вышеприведенном методе создания экземпляра я не уверен, как инициализировать SKShapeNode с помощью метода shapeNodeWithPath. или есть другой способ установить Tile.center = YES;


person Linda Keating    schedule 02.03.2015    source источник
comment
Почему вы используете SKShapeNode для простой плитки?   -  person sangony    schedule 02.03.2015


Ответы (1)


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

...
[self setPath:CGPathCreateWithRoundedRect(CGRectMake(-30, -30, 60, 60), 4, 4, nil)];
//or it could be [self setPath:CGPathCreateWithRoundedRect(CGRectMake(-30, 30, 60, 60), 4, 4, nil)];
...
characterNode.position = CGPointMake(0, 15);
...

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

Удачи и надеюсь, что это поможет.

person Skyler Lauren    schedule 02.03.2015