SKNode子类与自定义init方法

时间:2015-10-15 15:34:25

标签: ios objective-c sprite-kit sknode

我正在尝试使用自定义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的正确方法吗?它是实现非静态自定义初始化方法的有效策略吗?
非常感谢,
多梅尼科

1 个答案:

答案 0 :(得分:1)

据我所知,[SKNode node];方法设置self.scene属性(最可能的默认值,如1024x768)。您提供的代码不会创建self.scene属性,因此它没有默认值。

SKNode添加到场景后,self.scene属性将指向已添加到的SKScene(这将始终指向根SKScene即使它嵌套像SKScene-> SKNode-> SKNode)。 然后您可以阅读self.scene.size以获取场景的大小。

如果您需要在添加到场景之前阅读值,您可以执行以下操作:

  1. 在自定义初始化方法中传递对SKScene的引用,并将self.scene设置为它。

  2. 您可以将尺寸作为参数传递。

  3. 您可以对其进行硬编码。

  4. 这些按我的意思排列。