我尝试做的是自定义节点类,但在init中它还创建了自己的单个节点(声明为@properties,因此您可以在任何地方访问它们。这些节点也是我在这里找到的自定义类Correct way to create button in Sprite Kit?)。如果我在我的GameScene.m中尝试[self addChild:]这些单独的节点,它将崩溃,从而产生运行时错误。添加一个异常断点告诉我问题出在我在下面显示的行中,但我不明白为什么。错误是"尝试使用名称(null)"将nil节点添加到父SKScene,尽管我给该节点命名。请把我推向正确的方向。我是iOS开发的绝对初学者,并试图查找我想要实现的目标,但没有运气。
源代码:
DirectionalPad.h
#import "DirectionalButton.h"
@interface DirectionalPad : SKSpriteNode
@property(nonatomic)DirectionalButton *dirBtnLeft;
@property(nonatomic)DirectionalButton *dirBtnRight;
@end
DirectionalPad.m
-(void)addButtons
{
//Executed in init method
NSString *pathToImageForLeftButtonTexture = @"buttonDirectionalLeft";
NSString *pathToImageForRightButtonTexture = @"buttonDirectionalRight";
self.dirBtnLeft = [[DirectionalButton alloc]initWithImageNamedNormal:pathToImageForLeftButtonTexture selected:pathToImageForLeftButtonTexture];
/*Setting size, position, name, zPosition*/
self.dirBtnRight = [[DirectionalButton alloc]initWithImageNamedNormal:pathToImageForRightButtonTexture selected:pathToImageForRightButtonTexture];
/*Same here*/
}
GameScene.m
#import "DirectionalButton.h"
#import "DirectionalPad.h"
@implementation GameScene
{
DirectionalPad *pad;
}
//Some code omitted...
- (void)createHUD {
//Executed in didMoveToView:
pad = [[DirectionalPad alloc] init];
/*PROBLEMATIC LINE*/
[self addChild:pad.dirBtnLeft];
/*END*/
[self addChild:pad.dirBtnRight];
[self addChild:pad];
}
答案 0 :(得分:0)
您没有显示DirectionalPad类的init方法。 init方法是否显式创建了新的DirectionalButton对象(使用alloc和new)?如果没有,则创建一个pad对象,其dirBtnLeft和dirBtnRight属性在创建pad后都将具有值nil。因此
[self addChild:pad.dirBtnRight];
将等同于
[self addChild:nil];
这显然不是你想做的。这正是运行时错误消息告诉您的内容。在这种情况下,消息的名称(null)部分无关紧要。