gpt4 book ai didi

macos - SpriteKit Node.intersectsNode() 方法在奇怪的情况下不检测交叉点

转载 作者:行者123 更新时间:2023-11-28 07:13:54 25 4
gpt4 key购买 nike

我正在构建一个有点糟糕的平台游戏,我正在尝试检测一个节点的部分是否与另一个节点的部分位于同一位置。我将使用方法:

func intersectingNode(node: SKNode) -> SKNode?{
for floorObject in floorObjects{ // floorObjects is of type [SKNode]
if floorObject.intersectsNode(node){
return floorObject
}
}
return nil
}

此时需要指出的是,这里涉及到的所有节点的 anchor 都在(0.5, 0.5)。主 SKScene 的 anchor 位于窗口的左下角。

此方法应该返回 floorObjects 数组中与 node 相交的对象,如果它不与 floorObjects< 中的任何对象相交 数组,该方法将不返回任何节点。但我的问题是:如果 node 的 x 位置小于 floorObject 的 x 位置和 node 的 y 位置,则该方法不返回任何节点 大于 floorObject 的 y 位置。现在,由于所有节点上的 anchor 都位于 (0.5, 0.5),因此该区域的一部分位于 floorObject 左上角的顶部。

如果我把第三行改成这样:

if node.intersectsNode(floorObject){

floorObject 的 x 位置将小于 node 的 x 位置,floorObject 的 y 位置将大于 y 节点的位置。

那么,如果一个节点框架中的任何位置位于另一个节点框架内的某处,我如何确保上述方法始终返回一个节点?

最佳答案

您可以直接比较 frame,这应该可以满足您的需求:

if node.frame.intersects(floorObject.frame) {
return floorObject
}

Link to Playground

关于macos - SpriteKit Node.intersectsNode() 方法在奇怪的情况下不检测交叉点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27209432/

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