我正在使用Sprite Kit引擎。我曾经在initWithSize
中编写代码,但自更新以来,initWithSize
不会自动调用,而是调用viewDidLoad
。我知道必须使用initWithSize
而不是initWithCoder
,所以我更改了代码:
-(id) initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.backgroundColor = [SKColor blueColor];
SKSpriteNode *paddle = [SKSpriteNode spriteNodeWithImageNamed:@"paddle"];
paddle.position = CGPointMake(150, 100);
paddle.physicsBody.dynamic = NO;
[self addChild:paddle];
}
return self;
}
为:
-(instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
self.backgroundColor = [SKColor blueColor];
SKSpriteNode *paddle = [SKSpriteNode spriteNodeWithImageNamed:@"paddle"];
paddle.position = CGPointMake(150, 100);
paddle.physicsBody.dynamic = NO;
[self addChild:paddle];
}
return self;
}
现在,场景的颜色变为蓝色,但我无法向场景添加精灵。在构建时我也没有收到任何错误。
我应该在initWithCoder
进行一些更改吗? (如果是,请说明并详细说明)
可以initWithCoder
使用与initWithSize
中完全相同的代码吗?
PS:下面是我在GameScene.m中的完整代码,我没有任何其他场景。
#import "GameScene.h"
@implementation GameScene
-(void)didMoveToView:(SKView *)view {
/* Setup your scene here */
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
SKSpriteNode *paddle = [SKSpriteNode spriteNodeWithImageNamed:@"paddle"];
paddle.position = CGPointMake(150, 100);
paddle.physicsBody.dynamic = NO;
[self addChild:paddle];
}
return self;
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
}
@end
我只是将代码从initWithSize复制并粘贴到initWithCoder。它似乎没有创建桨对象。
请帮忙!
答案 0 :(得分:0)
这可能是方法签名不匹配?
而不是instancetype,它被定义为:arraylist
我只是在查看是否可以在我的键控编码实现中获得实例类型的类型安全性并找到您的问题。
其他人说它有效。值得一试。 Why does initWithCoder not return instancetype?