Я пытаюсь настроить свою сцену в файле сцены SpriteKit (.sks). Я устанавливал свои узлы как цветные прямоугольники, а использование childNodeWithName
отлично подходит для десериализации в объекты SKNode.Файлы сценария SpriteKit: как использовать childNodeWithName с пользовательским подклассом?
Но я пытаюсь десериализоваться в пользовательский подкласс BadGuyZagNode. Код строит отлично, но сбой во время выполнения.
Код:
GameScene.m
-(void)didMoveToView:(SKView *)view {
BadGuyZagNode *badGuy = (BadGuyZagNode *)[self childNodeWithName:@"badguy"];
[badGuy setupBadGuyZagNode];
}
BadGuyZagNode.h
@interface BadGuyZagNode : SKSpriteNode
- (void) setupBadGuyZagNode;
@end
BadGuyZagNode.m
@implementation BadGuyZagNode
- (void) setupBadGuyZagNode {
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size];
self.physicsBody.categoryBitMask = GMCollisionCategoryMinorBadGuy;
self.physicsBody.collisionBitMask = GMCollisionCategoryLaser;
self.physicsBody.contactTestBitMask = GMCollisionCategoryLaser;
self.physicsBody.affectedByGravity = NO;
self.physicsBody.dynamic = NO;
}
@end
Ошибка
'NSInvalidArgumentException', reason: '-[SKSpriteNode setupBadGuyZagNode]: unrecognized selector sent to instance
Все работает, если я не использую childNodeWithName и просто инициализации в spriteNodeWithColor.
Я попытался добавить метод init без каких-либо параметров и вызвал [super init]
, но это не полетело.
Я рассмотрел оба этих ответов, но ни применяться:
Subclassing SKNodes created with SpriteKit .sks scene file
Subclassing SpriteKit classes in Swift
Я также смотрел видео WWCD SpriteKit Best Practices, но примеры не используют какой-либо пользовательские классы.
Так звучит так, будто вы говорите «Это невозможно», что является правильным ответом. Я не знал достаточно о SpriteKit, чтобы узнать, возможно ли это. – gmoore
Я не говорю, что это невозможно. Но если вы используете SKS прямо из коробки без дополнительной поддержки кода, тогда да. Я читал http://stackoverflow.com/questions/25123264/subclassing-sknodes-created-with-spritekit-sks-scene-file. Исходя из этого, это представляется возможным. Как сейчас у вас есть свои вещи, это не сработает, поэтому вы получаете сообщение «непризнанный селектор, отправленный на экземпляр». –