繁体   English   中英

触摸SpriteKit中的节点

[英]Touch through a node in SpriteKit

因此,我正在制作塔防游戏并让瓷砖板工作并且能够在某种程度上放置塔楼。

当玩家点击网格上方的按钮时,它将在塔位置上切换并允许玩家将塔放置在网格内的单元格上。 然而,每个塔也围绕它获得一个圆形ShapeNode,以处理进入射击范围的蠕变的检测。 一旦放置它,这个形状节点就会在塔周围显得很好。

我用来放置塔的逻辑是它找到你触摸的节点(命名为“cell”)并用塔节点替换它。 但是如果塔节点连接了圆形节点并覆盖了它旁边的单元格,我就无法选择圆圈下方的单元节点。

我如何触摸“穿过”圆圈,或将其填充空间设置为什么,以便我可以访问它下面的单元格?

我一直在学习精灵套装,所以如果有更简单的方法,请随意指出我正确的方向。

如果要在给定点找到节点但不一定是最深的节点,则可以使用包含SKScene的SKNode上的nodesAtPoint available。

这允许您查找场景的所有子节点,或与给定点相交的节点。 然后,您可以进一步过滤以查找所需的特定节点,可能是通过基于节点类或节点名称过滤数组。

如果在特定点查找物理实体,可以使用类似的方法,使用方法enumerateBodiesAtPoint:usingBlock:在SKPhysicsWorld中可用

值得注意的是,当使用nodesAtPoint时:该点位于调用节点坐标系中,其中enumerateBodiesAtPoint:usingBlock:将始终位于场景坐标系中。

在没有看到任何相关代码的情况下,很难确定,但从您的描述来看,我认为您的问题在于形状节点。 我建议您使用塔的物理体,而不是使用形状节点来处理您的联系人。 您仍然可以为塔提供圆形物理主体,而无需添加全新节点。 删除形状节点也将解决交叉触摸干扰。

TouchesBegan会自动检测该位置的所有节点,您只需要遍历它们。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches)
    {
        CGPoint touchPoint = [touch locationInNode:self];
        NSArray *nodes = [self nodesAtPoint:touchPoint];

        if ([nodes count])
        {
            for (SKNode *node in nodes)
            {
                if ([node.name isEqualToString:@"cell"])
                {

                }
                else
                {

                }
            }
        }
    }
}

“自我”是接触开始的节点(最有可能是你的场景)。 您也可以通过父对象过滤它,例如; 如果将所有节点添加到名为“background”的父节点,则可以通过将“self”替换为背景节点来过滤为仅显示背景节点的子节点(尽管这将导致使用背景节点坐标)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM