- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我有两个凹形SKShapeNode
,即nodeA和nodeB,nodeA在屏幕上固定,而nodeB可以由用户手指在屏幕上拖动。 NodeA 需要能够检测 NodeB 是否与它重叠。首先,我尝试使用 SKPhysicsContactDelegate
碰撞检测。 didBeginContact
和 didEndContact
方法被多次调用,通过研究我发现这是预期的行为。为了解决这个问题,我只需将一个整数变量设置为 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
关于swift - 重叠凹面 SKShapeNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302358/
当我尝试在 OpenGL 中使用 GL_POLYGON 时遇到问题。我不知道如何解释这一点,但我的所有顶点都与第一个顶点相连。当我尝试为对象着色时出现问题。我想画一个简单的物体。 void TOP (
我是一名优秀的程序员,十分优秀!