Apples 文档指出 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, rotation, 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