Итак, я сгенерировал SKShapeNode и вам нужно знать, когда щелкнут этот узел. Я делаю это по телефону:Проверьте, нажата ли SKShapeNode
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:positionInScene];
if ([node.name isEqualToString:TARGET_NAME]) {
// do whatever
}
}
}
Так что результат, который я получаю, довольно странный. Нажатие самой точки на самом деле действительно работает. Тем не менее, нажатие в любом месте экрана, которое находится на юго-запад от позиции SKShapeNode, также сделает вышеуказанный код истинным.
С SKShapeNode представленного красной точкой, любой UITouch в заштрихованной области сделает мой код выше, верно.
Вот как я строю SKShapeNode. Также может быть важно отметить, что мое приложение работает в ландшафтном режиме.
#define RANDOM_NUMBER(min, max) (arc4random() % (max - min) + min)
- (SKShapeNode *)makeNodeWithName:(NSString *)name color:(UIColor *)color
{
SKShapeNode *circle = [SKShapeNode new];
int maxXCoord = self.frame.size.width;
int maxYCoord = self.frame.size.height;
CGFloat x = RANDOM_NUMBER((int)TARGET_RADIUS, (int)(maxXCoord - TARGET_RADIUS));
CGFloat y = RANDOM_NUMBER((int)TARGET_RADIUS, (int)(maxYCoord - TARGET_RADIUS - 15));
circle.fillColor = color;
circle.strokeColor = color;
circle.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(x, y, TARGET_RADIUS, TARGET_RADIUS)].CGPath;
circle.name = name;
return circle;
}
Спасибо за любую помощь!
Мой друг на самом деле указал на это прошлой ночью. Я собирался ответить на свой пост, но похоже, что вы сделали лучшую работу, чем я мог. Благодаря! – Dan