Как создать подкласс SKNode для его инициализации с заданным размером

SKScene является подклассом SKNode, и мы можем инициализировать его с определенным размером. Но у самого SKNode такой возможности нет, и его размер равен наименьшему прямоугольнику, содержащему дочерние элементы. Иногда мне нужно, чтобы мой SKNode растягивался до окна, независимо от того, насколько маленькое содержимое. Поэтому я хотел бы иметь возможность настраивать класс SKNode, добавляя возможность устанавливать его размер. Ты хоть представляешь, как?


person Mikayil Abdullayev    schedule 17.02.2014    source источник
comment
SKNode не имеет размера, и я считаю, что его frame.size всегда будет равен 0,0. Если вы хотите растянуть содержимое узла, вам придется делать это для каждого дочернего элемента индивидуально.   -  person LearnCocos2D    schedule 18.02.2014
comment
А вы хоть представляете, как это делается в классе SKScene? Как вы знаете, это подкласс SKNode, поэтому, очевидно, к нему были добавлены некоторые дополнительные функции, а также возможность устанавливать размер.   -  person Mikayil Abdullayev    schedule 18.02.2014


Ответы (1)


Как ни странно, кажется, нет встроенного способа сделать это в наборе спрайтов. Возможно, вам придется решить, добавив прозрачный SKSpriteNode к вашему узлу:

- (id)initWithSize:(CGSize)size{
    self = [super init];
    if (self) {
        SKSpriteNode *node = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithWhite:1.0 alpha:0.0] size:size];
        [self addChild:node];
        node.zPosition = -1;
        node.name = @"transparent";
        node.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    }
    return self;
}

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

person Andrew97p    schedule 18.02.2014
comment
Я думаю, что для узла имеет смысл не иметь собственного фрейма, и идея, представленная здесь, — лучший способ решить эту проблему. ИМХО, конечно - person Mazyod; 20.03.2015