고양이 노드와 새 노드가 있습니다. 새 노드는 birdBlock이라는 컨테이너 노드에 함께 중첩됩니다. 모든 것이 WorldNode에 포함되어 있습니다. WorldNode에 새를 추가하면 Cat이 적절하게 상호 작용할 수 있지만 새가 birdBlock에있을 때 Cat은 길을 막 빗나가고 날아갑니다.SpriteKit - 노드가 다른 노드 자식을 치고 동작을 수행하는지 감지합니다.
나는 나의 새를 찾아 다음 사용하고 있습니다 : 블록의
[worldNode enumerateChildNodesWithName:kBirdName usingBlock:^(SKNode *node, BOOL *stop)
{
SKSpriteNode *newBird = (SKSpriteNode *)node;
if (CGRectIntersectsRect(newBird.frame,cat.frame))
{
//Do Something
//This is never reached when the birds are in the SKSpriteNode birdBlock.
//They just get shoved all over the screen.
}
}];
새들은 올바른 이름을 가지고있다.
그들은 현재 열거 중이지만 화면 주위를 돌아 다니는 것 외에 고양이와 상호 작용을하지 않습니다.
는 지금은이 일을하고있다 :[[worldNode children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
SKSpriteNode *blockNode = (SKSpriteNode *)obj;
if ([blockNode.name isEqualToString:kBirdBlockName])
{
[blockNode enumerateChildNodesWithName:kBirdName usingBlock:^(SKNode *node, BOOL *stop)
{
SKSpriteNode *nbird = (SKSpriteNode *)node;
NSLog(@"FOUND BIRDS HERE");
//THIS IS FOUND! But below still does not work
if (CGRectIntersectsRect(nbird.frame, cat.frame))
{
NSLog(@"Hit BIRD");
[nbird removeFromParent];
}
}
}
}];
그래서이 중 하나가 작동하지 않습니다. 스프라이트의 좌표계는 어떻게 변경합니까?
리터럴이 작동하지 않는 것처럼 보일뿐 아니라 블록에없는 새도 깨지기 쉬운 것 같습니다. 이제 고양이는 내가 원하는 상호 작용을 수행하는 대신 모든 비행을 보냅니다. – Siriss
블록에서 새가 둥지를 틀고 있습니까? 또한 프레임 교차점을 감지하는 곳에서 rect가 동일한 노드 좌표 공간에 있는지 확인하십시오. cat.frame은 장면 좌표에 있다고 가정하고 있지만 newBird.frame은 장면이 아닌 부모 좌표 공간에 있습니다 (둥지에있는 경우). 충돌이 발생하면 부모에게서 새를 제거하고 원하는 위치로 전환하고 위치에 추가해야 할 수도 있습니다. – Bamsworld
위로 올라가는 것은 무엇을 의미합니까? 그들은 눈에 보이고 고양이가 그들을 때리면 날으십시오. 같은 좌표 공간에서 어떻게 만들 수 있습니까? – Siriss