SKScene является подклассом SKNode, и мы можем инициализировать его с определенным размером. Но у самого SKNode такой возможности нет, и его размер равен наименьшему прямоугольнику, содержащему дочерние элементы. Иногда мне нужно, чтобы мой SKNode растягивался до окна, независимо от того, насколько маленькое содержимое. Поэтому я хотел бы иметь возможность настраивать класс SKNode, добавляя возможность устанавливать его размер. Ты хоть представляешь, как?
Как создать подкласс SKNode для его инициализации с заданным размером
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
Я думаю, что для узла имеет смысл не иметь собственного фрейма, и идея, представленная здесь, — лучший способ решить эту проблему. ИМХО, конечно
- person Mazyod; 20.03.2015