我正在尝试使用自定义init方法对SKNode类进行子类化。 我的自定义init方法如下所示:
//interface
@interface BlocksLayer : SKNode
-(instancetype)initWithDirection(BlocksLayerMotionDirection)direction;
@end
//implementation
-(instancetype)initWithDirection:(BlocksLayerMotionDirection)direction{
self=[super init];
if (self) {
self.direction=direction;
[self makeLayer];
}
return self;
}
-(void)makeLayer{
//scene size has always width=0 and height=0
NSLog(@"%f",self.scene.size.width);
NSLog(@"%f",self.scene.size.height);
}
当我使用自定义方法初始化类时,scene.width和scene.height始终为零。
相反,如果我使用静态节点方法初始化,则scene.size包含有效值。
你知道这是什么问题吗?
这是子类化SKNode的正确方法吗?它是实现非静态自定义初始化方法的有效策略吗?
非常感谢,
多梅尼科
答案 0 :(得分:1)
据我所知,[SKNode node];
方法设置self.scene
属性(最可能的默认值,如1024x768)。您提供的代码不会创建self.scene
属性,因此它没有默认值。
将SKNode
添加到场景后,self.scene
属性将指向已添加到的SKScene
(这将始终指向根SKScene
即使它嵌套像SKScene-> SKNode-> SKNode)。 然后您可以阅读self.scene.size
以获取场景的大小。
如果您需要在添加到场景之前阅读值,您可以执行以下操作:
在自定义初始化方法中传递对SKScene
的引用,并将self.scene
设置为它。
您可以将尺寸作为参数传递。
您可以对其进行硬编码。
这些按我的意思排列。