<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "macOS: -",
    "tvOS: -",
    "visionOS: -",
    "watchOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "SpriteKit",
  "identifier" : "/documentation/SpriteKit/SKNode/atPoint(_:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "SpriteKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SKNode(im)nodeAtPoint:"
  },
  "title" : "atPoint(_:)"
}
-->

# atPoint(_:)

Returns the deepest visible descendant that intersects a point.

```
func atPoint(_ p: CGPoint) -> SKNode
```

## Parameters

`p`

A point in the node’s coordinate system.

## Return Value

A descendant in the subtree that intersects the point, or the receiver if no nodes intersect the point. Only nodes that have an [`isHidden`](/documentation/SpriteKit/SKNode/isHidden) of `false` and an [`alpha`](/documentation/SpriteKit/SKNode/alpha) greater that zero are returned. If multiple descendants intersect the point, the deepest node in the tree is returned. If multiple nodes are at the same level, the intersecting node with the largest z position is returned.

## Discussion

A point is considered to be in a node if it lies inside the rectangle returned by the [`calculateAccumulatedFrame()`](/documentation/SpriteKit/SKNode/calculateAccumulatedFrame()) method.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)