我试图在我的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最佳实践视频,但这些示例并未使用任何自定义类。
答案 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。
你怎么称呼它(即显示更多代码)?