在学习SpriteKit的过程中,我正在尝试制作一款小型冒险游戏。我正在创建一个英雄,并将其添加到场景中,然后在 期间touchesBegan:
,我检测触摸是否源自英雄,并采取相应的行动。
如果我将英雄添加为SKSpriteNode
触摸检测到他。如果我将他添加为子类,SKSpriteNode
触摸不会!添加的区别:
_heroNode = [SKSpriteNode spriteNodeWithImageNamed:@"hero.png"];
对比
_heroNode = [[ADVHeroNode alloc] init];
初始化看起来像这样:
- (id) init {
if (self = [super init]) {
self.name = @"heroNode";
SKSpriteNode *image = [SKSpriteNode spriteNodeWithImageNamed:@"hero.png"];
[self addChild:image];
}
return self;
}
将英雄添加为 SKSpriteNode 的子类的工作原理是将其添加到场景中,但触摸不会检测到他。我的touchesBegan:
样子是这样的:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
if (YES) NSLog(@"Node name where touch began: %@", node.name);
//if hero touched set BOOL
if ([node.name isEqualToString:@"heroNode"]) {
if (YES) NSLog(@"touch in hero");
touchedHero = YES;
}
}
令人沮丧的是,这段代码在添加直接向上时工作得很好SKSpriteNode
,而不是我自己的子类。有什么建议么?