我正在尝试对 an 进行子类化,SKNode
以便当您触摸它的框架(包含其子项的最小框架)时,该touchesBegan::
方法会通知它。
SKSpriteNode
但是,似乎只有在触摸孩子时才会通知它。我尝试过覆盖该containsPoint:
方法但没有成功。
这是我的代码:
@interface gameNode : SKNode {
SKSpriteNode* mainChar;
}
@property (weak, nonatomic) id <gameNodeDelegate> delegate;
@end
@implementation gameNode // When touched, touchesBegan: method not getting called.
-(id) init {
if (self = [super init]) {
self.userInteractionEnabled = YES;
mainChar = [SKSpriteNode node]; // When touched, touchesBegan: method gets called.
mainChar.color = [SKColor redColor];
mainChar.size = CGSizeMake(25, 25);
[mainChar runAction:[SKAction scaleTo:0 duration:0]];
mainChar.position = CGPointMake(100, 100);
[self addChild:mainChar];
SKSpriteNode* n = [SKSpriteNode node]; // When touched, touchesBegan: method gets called.
n.size = mainChar.size;
n.position = CGPointMake(-100, -100);
n.color = [SKColor greenColor];
[self addChild:n];
[mainChar runAction:[SKAction customAnimationWithProperties:CUAPropertiesForScaleBounce(CUADirectionTypeIn, 1)]];
}
return self;
}
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"That's a touch!");
}
-(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
}
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
}
@end
发生的情况是,当触摸 mainChar 和 nSKSpriteNodes
节点而不是屏幕的其余部分时,我只会得到一个触摸事件。
我能想到让它工作的唯一方法是SKSpriteNode
在背景中添加一个透明,但必须有更好的方法!
我怎样才能让它SKNode
“吞下”它收到的触摸,而不管孩子是否正在被触摸?即我希望通过该方法在SKNodes
' 框架中进行触摸以通知它。touchesBegan::
更新:我认为这是SKNode
' 框架的问题。当我添加孩子后做..
NSLog(@"Frame Width: %f, Frame Height: %f", self.frame.size.width, self.frame.size.height);
框架返回的高度和宽度为 0。但是,当我这样做时[self calculateAccumulatedFrame]
,它返回正确的大小。为什么是这样?
更新:这个问题完全是一团糟。我将坚持添加透明SKSpriteNode
或使用SKScene
. 很抱歉给大家带来了困扰,感谢您的帮助。