Apples のドキュメントには、SKNode の nodeAtPoint メソッドがツリーの最も深いノードを返すと記載されています。これは、シーン ノードを一番上にしてツリーを描画すると、ツリーの最下部にあるノードの 1 つとして答えが期待されるということです。それは私には起こっていません。私のツリーは次のようになります。
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