簡體   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