我正在尝试创建一个简化的马里奥博士游戏,其中我有一个药丸形状的物体,每一半都有自己的颜色。
药丸可以堆叠在一起,我需要通过碰撞检测来找出两种相似颜色是否发生了碰撞。
我尝试了什么
-
我创建了一个
SKSpriteNode
子类,在那里我生成了一半的药丸及其颜色,并在场景中生成了两个。我将它们彼此靠近,并在它们之间创建了一个固定的关节。问题是我无法像单个节点一样旋转它们(这个问题有一个悬而未决的问题) -
我创建了两个
SKSpriteNode
子类。第一个就像上面的一样,返回半颗药丸,但不是从场景中调用,而是从第二个子类调用,该子类将药丸作为单个节点返回到场景中。在这种情况下,旋转有效,但我无法弄清楚如何在它们之间创建一个关节并将该关节从场景外部添加到物理世界中。
无论哪种方式,我的解决方案似乎都不行。您将如何创建药丸对象?
我只会创建一个SKNode子类,在药丸的左半部分和右半部分有两个SKSpriteNode引用,并将这两个精灵节点添加为子节点。
像这样的东西。
class Pill: SKNode {
var left: SKSpriteNode?
var right: SKSpriteNode?
func setup() {
left = SKSpriteNode()
/* Setup left half of the pil */
addChild(left!)
right = SKSpriteNode()
/* Setup right half of the pil */
addChild(right!)
}
}
我不会为对象设置两个节点。颜色毕竟只是质地。我会创建一个SKSpriteNode
子类,一个 physicsBody,并将其余部分存储为属性。然后在碰撞时,您进行侧面和颜色和旋转的计算。
enum PillColor {
case red
case blue
case yellow
}
class Pill: SKSpriteNode {
var rightSide: PillColor?
var leftSide: PillColor?
var rotation: Int
}
在SKPhysicsContactDelegate
的didBegin(_ contact)
方法中,你可以使用SKPhysicsContact
的contactPoint
属性来知道两者的实际相遇位置。