gpt4 book ai didi

ios - 为什么 SKNode nodeAtPoint 返回错误的节点?

转载 作者:行者123 更新时间:2023-11-29 02:44:06 25 4
gpt4 key购买 nike

Apple 文档指出 SKNode 上的 nodeAtPoint 方法返回树中最深的节点。我的意思是,如果您绘制出场景节点位于顶部的树,则答案应该是树中最底部位置的节点之一。这不会发生在我身上。这是我的树的样子:

                           scene
|
world
|
+------------+----+---------+------------+
| | | |
leftArrow rightArrow boardLayer statusLayer
|
+-----------+-----------+--------+-+---------------+
| | | | |
arrow highlight trough rotating(0) testDump
(21) |
+--------+----------+
| | |
guides board playerPiece
(24) (20) (13)

括号中的数字是节点的 z 位置。当我向场景询问“nodesAtPoint”并给它一个与playerPiece位置相对应的计算点时,我得到:“world,boardLayer,rotating,highlight,board,playerPiece”。这是我所期望的。然而,当我使用同一点查询场景中的“nodeAtPoint”时,我得到“突出显示”。我期待 playerPiece。为什么没有返回该节点?我忽略了什么?

我不确定代码有什么用处,但它就是这样。此代码位于 Board.m(树的底部)中。

    CGPoint pt = [CheckerUtilities locationFromColumn:column row:row];
CGPoint p = [self.parent.parent convertPoint:pt toNode:[Globals sharedGlobals].scene];
NSArray *nodes = [[Globals sharedGlobals].scene nodesAtPoint:p];
for (SKNode *node in nodes)
NSLog(@"%@, %@, %f", [node class], node.name, node.zPosition);
SKNode *checker = [[Globals sharedGlobals].scene nodeAtPoint:p];
NSLog(@"node: %@", [checker class]);

输出为:

SKNode, world, 0.000000
BoardLayer, boardLayer, 0.000000
SKSpriteNode, rotating, 0.000000
Highlight, highlight, 21.000000
Board, board, 20.000000
CheckerSprite, checker, 13.000000
node: Highlight

最佳答案

来自文档:

In a scene, when Sprite Kit processes touch or mouse events, it walks the scene to find the closest node that wants to accept the event. If that node doesn’t want the event, Sprite Kit checks the next closest node, and so on. The order in which hit-testing is processed is essentially the reverse of drawing order.

换句话说, HitTest 从添加到节点的最后一个子节点到第一个节点开始(如您所述)。但是,zPosition 不仅会覆盖绘图顺序,还会覆盖 HitTest 顺序:

Sprite Kit uses the zPosition value only to determine the hit testing and drawing order.

如果多个节点在抽头点重叠,则首先选择具有最高 z 值的节点。

关于ios - 为什么 SKNode nodeAtPoint 返回错误的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com