2015-01-12 4 views
0

Я использую двигатель Sprite Kit. Я использовал код в initWithSize, но с момента его обновления initWithSize не вызывается автоматически, вместо этого вызывается viewDidLoad. Я должен знать, что вместо initWithSize, initWithCoder пришлось использовать, поэтому я изменил код из:initWithCoder не работает должным образом в Xcode 6?

-(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. Кажется, он не создает объект paddle.

Пожалуйста, помогите!

+0

разместить код, который создает спрайт, в противном случае мы не можем сказать вам, почему это не вызывалось – LearnCocos2D

+0

Я использую следующий код для создания спрайтов из образа импортированного в проект: SKSpriteNode * лопатка = [SKSpriteNode spriteNodeWithImageNamed: @ "paddle"]; paddle.position = CGPointMake (150, 100); paddle.physicsBody.dynamic = NO; [self addChild: paddle]; –

+0

skspritenode не имеет инициализатора initWithSize, вы, вероятно, ошибаетесь в нем с помощью SKScene – LearnCocos2D

ответ

0

Возможно, это несоответствие подписи метода?

Вместо instancetype она определяется как: - (id)initWithCoder:(NSCoder *)decoder

Я просто искал, если я мог бы иметь типобезопасность типа, например, в моей реализации кодирования введенного пользователя, и нашел ваш вопрос.

Другие говорят, что это работает. Было бы неплохо проверить. Why does initWithCoder not return instancetype?

Смежные вопросы