Я боролся с этим какое-то время и хотел бы помочь!locationInNode: неточно после масштабирования сцены
У меня есть карта плитки в наборе спрайтов, пользователь может использовать любую плитку, и все происходит. Чтобы получить плитку они повернутую на, я использую что-то вроде этого:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInNode:_mapLayer];
SKNode *tile = [_mapLayer nodeAtPoint:touchLocation];
// Do things with the tile...
}
Однако, я также хочу, чтобы пользователь, чтобы иметь возможность увеличивать и уменьшать масштаб, чтобы получить лучшее представление о карте, если это необходимо. Это достаточно просто, я установил щепотку распознавани и масштабировать изображение с помощью:
-(void)handlePinch:(UIPinchGestureRecognizer *)recognizer {
[self runAction:[SKAction scaleBy:recognizer.scale duration:0]];
}
Все работает, как и ожидалось, за исключением того, что, как только масштаб сцены ничего, кроме 1,0, метод locationInNode:
возвращает неправильный координаты, вызывая nodeAtPoint:
, чтобы вернуть неправильную плитку.
Например, если я нажимаю на плитку, когда масштаб 1,0, все работает. Но если я масштабирую сцену до 0,9 масштаба и коснувшись той же плитки, locationInNode:
вернет неправильные координаты, и поэтому будет выбрана другая плитка для той, которую я использовал.
Я что-то не так?
Edit: Я создал образ, чтобы проиллюстрировать мою проблему в ответ Андрею, что может помочь: http://i.imgur.com/N1XcyNx.png
A-ha! Большое спасибо, это то, что я делал неправильно. – Koonga