我正在尝试创建一个简化的马里奥博士游戏,我有一个药丸形状的物体,每一半都有自己的颜色。
药丸可以堆叠在一起,我需要通过碰撞检测找出两种相似的颜色是否发生碰撞。
我创建了一个SKSpriteNode
子类,我用它的颜色生成了一半的药丸,并在我的场景中产生了两个。我把它们放在彼此附近并在它们之间建立了一个固定的关节。问题是我无法将它们旋转为好像它们是一个节点(there's an open question regardin this issue)
我创建了两个SKSpriteNode
子类。第一个就像上面一个,返回半个药丸,但不是从场景中调用,而是从第二个子类调用它们,它将丸作为单个节点返回到场景中。在这种情况下,旋转工作,但我无法弄清楚如何在它们之间创建一个关节,并从场景外部将该关节添加到physicsWorld。
无论哪种方式,我的解决方案都不合适。你会如何创造药丸对象?
答案 0 :(得分:1)
我不打算为该对象提供两个节点。毕竟颜色只是纹理。我将创建一个SKSpriteNode
子类,一个physicsBody并将其余的存储为属性。然后在碰撞时,你会对边和颜色以及旋转进行计算。
enum PillColor {
case red
case blue
case yellow
}
class Pill: SKSpriteNode {
var rightSide: PillColor?
var leftSide: PillColor?
var rotation: Int
}
在SKPhysicsContactDelegate
的{{1}}方法中,您可以使用didBegin(_ contact)
的{{1}}属性来了解两者实际相遇的位置。
答案 1 :(得分:1)
我只想创建一个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!)
}
}