我有一个 Cat 节点和一个 Bird 节点。鸟节点嵌套在一个称为birdBlock 的容器节点中。一切都包含在 WorldNode 中。如果我将一只鸟添加到 WorldNode,Cat 可以与它进行适当的交互,但是当鸟在 birdBlock 中时,Cat 只是将它们推开,它们就会飞起来。
我正在使用以下方法来寻找我的鸟:
[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.
}
}];
方 block 中的鸟有正确的名字。
它们现在正在被枚举,但除了在屏幕上飞来飞去之外,它们仍然不与猫互动。
现在我正在这样做:
[[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];
}
}
}
}];
所以这也不起作用。如何更改 Sprite 的坐标系?
Best Answer-推荐答案 strong>
您可以通过多种方式搜索节点树。 SKNode documentation在搜索节点树部分清楚地解释了它。
如果您有一个名为 @"node" 的节点,那么您可以通过在名称前放置一个 // 来搜索所有后代。所以你会搜索 @"//node"。
尝试将您的常量 kBirdName 更改为等于 @"//my_bird_name"
使用字符串文字的示例是 -
[worldNode enumerateChildNodesWithName"//nodeName" usingBlock:^(SKNode *node, BOOL *stop)
{ // Do stuff here... }
关于ios - SpriteKit - 检测节点是否命中另一个节点子节点并执行操作,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27297820/
|