gpt4 book ai didi

swift - 重叠凹面 SKShapeNode

转载 作者:行者123 更新时间:2023-11-30 13:50:51 25 4
gpt4 key购买 nike

在我的应用程序中,我有两个凹形SKShapeNode,即nodeA和nodeB,nodeA在屏幕上固定,而nodeB可以由用户手指在屏幕上拖动。 NodeA 需要能够检测 NodeB 是否与它重叠。首先,我尝试使用 SKPhysicsContactDelegate 碰撞检测。 didBeginContactdidEndContact 方法被多次调用,通过研究我发现这是预期的行为。为了解决这个问题,我只需将一个整数变量设置为 0,并在每次有联系时递增它,并在每次联系结束时递减它。如果该值大于 0,则两个节点重叠,如果该值等于 0,则它们不重叠。除非用户将 NodeB 拖到 NodeA 上的速度过快,否则这种方法可以正常工作。发生这种情况时,并不总是会调用正确的联系方法次数。例如,可能检测到3个接触点,但只有两个末端接触点(甚至没有),这使得程序认为两个节点仍然重叠,即使它们不重叠。我假设发生这种情况是因为用户拖动节点的速度比程序更新的速度快。然后我尝试在场景更新方法中使用 intersectsNode 方法,这不起作用,因为形状是凹的。基本上我只需要确切地知道两个节点何时重叠以及何时不重叠。我怎样才能做到这一点?最好的方法是什么?

如果有帮助,下面是我用来构造每个 SKShapeNode 的代码:

path = UIBezierPath()
path.moveToPoint(CGPointMake(-27, -27))
path.addLineToPoint(CGPointMake(-17, -27))
path.addLineToPoint(CGPointMake(-17, 17))
path.addLineToPoint(CGPointMake(27, 17))
path.addLineToPoint(CGPointMake(27, 27))
path.addLineToPoint(CGPointMake(-27, 27))
path.addLineToPoint(CGPointMake(-27, -27))
path.closePath()

shapePath = path.CGPath

shape = SKShapeNode(path: shapePath)
shape = SKPhysicsBody(polygonFromPath: shapePath)

最佳答案

您可以使用“暴力”解决方案,对于 ShapeB 中的每个顶点检查它是否在 ShapeA 内部:

NodeA内部的检查可以通过Recasting来实现 What is Raycasting

Pseudo code

关于swift - 重叠凹面 SKShapeNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302358/

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