Правильно ли работает свойство userInteractionEnabled на узлах SpriteKit?
У меня есть следующий простой код:
//
// BGMyScene.m
// Test1
//
// Created by AndrewShmig on 3/10/14.
// Copyright (c) 2014 Bleeding Games. All rights reserved.
//
#import "BGMyScene.h"
@implementation BGMyScene
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
/* Setup your scene here */
self.backgroundColor = [SKColor colorWithRed:0.15
green:0.15
blue:0.3
alpha:1.0];
// first label
SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
// myLabel.userInteractionEnabled = YES;
myLabel.text = @"Hello, World!";
myLabel.fontSize = 30;
myLabel.position = CGPointMake(CGRectGetMidX(self.frame),
CGRectGetMidY(self.frame));
[self addChild:myLabel];
// second label
SKLabelNode *myLabel2 = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
// myLabel2.userInteractionEnabled = YES;
myLabel2.text = @"Hello, World!";
myLabel2.fontSize = 30;
myLabel2.position = CGPointMake(100, 100);
[self addChild:myLabel2];
}
return self;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:self];
SKNode *touchedNode = [self nodeAtPoint:touchLocation];
NSLog(@"touchLocation x: %f and y: %f", touchLocation.x, touchLocation.y);
if (touchedNode != self) {
NSLog(@"Removed from parent.");
[touchedNode removeFromParent];
}
}
- (void)update:(CFTimeInterval)currentTime
{
/* Called before each frame is rendered */
}
@end
Он создает два SKLabelNodes и проверяет, были ли затронуты эти метки, если да - удалите их из родительского узла.
Странно то, что когда я устанавливаю userInteractionEnabled в YES, SKLabelNode не получает никакого события касания. Оставление userInteractionEnabled в NO работает нормально.
Может быть, лучше назвать это свойство userInteractionDisabled? Я что-то упустил?
1 ответ
Ваш код работает так, как я ожидаю.
Насколько я вижу, это не SKLabelNodes, принимающие прикосновения, а SKScene, у которого есть -(void)touchchesBegan... Это означает, что если вы добавите SKLabelNodes и установите их в.userInteractionEnabled = YES, то они впитают прикосновения прежде чем они достигнут сцены, потому что они на вершине сцены.
В противном случае вы должны создать подкласс SKLabelNode и установить userInteractionEnabled в вашем пользовательском инициализаторе. И затем есть touchSegan в подклассе SKLabelNode.