SpriteKit场景文件:如何将childNodeWithName与自定义子类一起使用?

时间:2014-12-15 04:41:41

标签: objective-c sprite-kit

我试图在我的SpriteKit场景文件(.sks)中设置我的场景。我将节点设置为彩色矩形,并使用childNodeWithName可以正常反序列化为SKNode对象。

但是我试图反序列化为名为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最佳实践视频,但这些示例并未使用任何自定义类。

1 个答案:

答案 0 :(得分:1)

可能没有足够的代码发布给您更深入的答案。但缺点是

[self childNodeWithName:@"badguy"];

不会返回BadGuyZagNode

的实例

您可以通过执行以下操作进行验证:

BadGuyZagNode *badGuy = (BadGuyZagNode *)[self childNodeWithName:@"badguy"];
NSLog(@"badGuy is %@", NSStringFromClass([badGuy class]));

我没有完全阅读Subclassing SKNodes created with SpriteKit .sks scene file,但根据问题/答案,如果你想在SKS中继承SKNode,你需要做一些工作(见答案) )。如果您不这样做,这就是您的节点不是BadGuyZagNode

的原因

我有点不清楚你的意思

  

如果我不使用childNodeWithName并且只是初始化a,那么一切正常   spriteNodeWithColor。

你怎么称呼它(即显示更多代码)?