Я потратил слишком много времени на это. Кто-то уже решил это, пожалуйста, помогите.
Враг стреляет по моему кораблю. SKPhysicsContact вступает во владение, и я получаю contactPoint. Я взрываю выпущенную ракету в точке контакта, в мировых координатах. Все хорошо. Теперь я хотел бы использовать точку не в координатах сцены, возвращаемых contactPoint, а в координатах моего корабля, чтобы начать испускать дым от корабля, где я был поражен. Раньше я успешно использовал функцию convertPoint, но я не могу понять это прямо здесь... Документы говорят, что contactPoint выражается в координатах сцены, в то время как у myShip есть свои координаты, живущие как дочерний элемент мирового узла, который является дочерним элементом узла сцены. Они находятся в одной иерархии узлов. Я думаю... У меня есть Scene->World->Camera, где myShip является потомком World. Мой код, я думаю, говорит о преобразовании contactPoint из координат сцены в координаты в myShip. Но это не работает. И никакая другая комбинация. Что мне не хватает? Я подозреваю иерархию камеры, но не уверен. Числа, возвращаемые в smoke.position, выходят из строя...
- (SKEmitterNode *) newSmokeEmitter: (SKPhysicsContact *) contact
{
NSString *smokePath = [[NSBundle mainBundle] pathForResource:@"ShipSmoke" ofType:@"sks"];
SKEmitterNode *smoke = [NSKeyedUnarchiver unarchiveObjectWithFile:smokePath];
smoke.targetNode = myShip;
smoke.name = @"shipSmoke";
smoke.position = [self convertPoint:contact.contactPoint toNode:myShip];
//my temporary kludge that places the smoke on the ship, randomly
//smoke.position = CGPointMake(skRand(-25,25), skRand(-25,+25));
NSLog(@"Ship at world pos: %f,%f", myShip.position.x, myShip.position.y);
NSLog(@"Contact at scene pos: %f,%f", contact.contactPoint.x, contact.contactPoint.y);
NSLog(@"Smoke position at ship pos: %f,%f", smoke.position.x, smoke.position.y);
[myShip addChild:smoke];
return smoke;
}