如何使用didMoveToView作为initWithSize



我将Xcode更新到版本6。从那以后,我再也不能使用过去使用 Objective C 在 Xcode 5 中编写的代码了。

有一些新文件:GameScene.h 和

GameScene.m 以及 GameScene.sks 代替 MyScene.h 和 MyScene.m

它们加载:

-(void)didMoveToView:(SKView *)view {
/* Setup your scene here */
}

而不是通常的

-(id) initWithSize: (CGSize)size {
}

我不能使用我以前在didMoveToView的initWithSize中编写的代码,它不能正常工作。如果我自己创建一个 initWithSize,它也不起作用。

请帮忙!:)

  • didMoveToView:根据 Apple 文档关于SKScene此方法将在视图呈现场景后立即调用,并且该方法打算在子类中重写。

讨论

此方法旨在在子类中重写。可以使用此方法在视图即将呈现场景时为场景实现任何自定义行为。例如,您可以使用此方法创建场景的内容。

在 7.0 及更高版本中可用。

  • initWithSize:在初始化新场景对象时调用,并且只调用一次。

initWithSize周围没有太多的Apple文档,但我确实发现了另一个可能与您的问题有关的问题。

在SpriteKit中配置SKScene内容的正确位置在哪里? - 讨论在哪里配置SKScene内容的正确位置,所选答案比较了使用initWithSize:didMoveToView:的差异和优点。

因为-(void)didMoveToView:(SKView *)view ;是一个新的可选协议,无论您是否使用它都必须实现,因此您不必对 Gamescene.m 子类进行单独的初始化

如果从 SKS 文件加载场景,则无法使用 initWithSize,因为它永远不会被调用。在这种情况下,场景使用 initWithCoder 初始化。

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        // do stuff
    }
    return self;
}

关于问题初始化...vs didMoveToView.这取决于你想要什么。Init 用于初始化,但您应该知道,当场景初始化时,self.view 为零(阅读@Popeye提供的 SO 链接)。

最新更新