我的场景中间有一个由四种不同颜色组成的正方形。同时,我从场景的每一侧随机生成相同颜色的较小正方形,意图与中间的正方形相撞。 (蓝色到蓝色,黄色到黄色等)。
我的目标是设置它,以便当蓝色方块与蓝色方块或任何类似物碰撞时,它将.removeFromParent()
。我该怎么做呢?如有必要,将发布代码。
编辑:
enum BodyType: UInt32 {
case blueSquare = 1
case redSquare = 2
case yellowSquare = 4
case greenSquare = 8
}
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
didBeginContact() {
switch(contactMask) {
case BodyType.redSquare.rawValue | BodyType.redSquare.rawValue:
let scoreLabel = childNodeWithName("scores") as! Points
scoreLabel.increment()
let firstNode = contact.bodyB.node
firstNode?.removeFromParent()
default:
return
}
}
答案 0 :(得分:3)
您应该做的第一件事是设置contactTestBitMasks&所有SKSpriteNodes上的categoryBitMasks,如下所示 -
struct PhysicsCatagory {
static let FirstPerson : UInt32 = 0x1 << 1
static let SecondPerson : UInt32 = 0x1 << 2
}
override func didMoveToView(view: SKView) {
...
firstPerson.SKPhysicsBody?.catagoryBitMask = PhysicsCatagory.FirstPerson
firstPerson.SKPhysicsBody?.contactTestBitMask = PhysicsCatagory.SecondPerson
...
secondPerson.SKPhysicsBody?.catagoryBitMask = PhysicsCatagory.SecondPerson
secondPerson.SKPhysicsBody?.contactTestBitMask = PhysicsCatagory.FirstPerson
...
}
这只是设置catagoryBitMask和contactTestBitMask。 categoryBitMask将等于您当前正在编辑的对象,而contactTestBitMask将等于您希望对象与之碰撞的对象。
此外,在我们继续之前,我们希望将Contact Delegate添加到我们的场景中。
class GameScene: SKScene, SKPhysicsContactDelegate{...
然后将委托添加到我们的场景中 -
override func didMoveToView(view: SKView) {
...
self.physicsWorld.contactDelegate = self
...
接下来,添加didBeginContact
func didBeginContact(contact: SKPhysicsContact) {
let firstBody = contact.bodyA.node as! SKSpriteNode!
let secondBody = contact.bodyB.node as! SKSpriteNode!
}
最后,测试......
func didBeginContact(contact: SKPhysicsContact) {
let firstBody = contact.bodyA.node as! SKSpriteNode!
let secondBody = contact.bodyB.node as! SKSpriteNode!
if firstBody.color == secondBody.color{
firstBody.removeFromParent()
secondBody.removeFromParent()
}
}
希望有所帮助! :d
答案 1 :(得分:1)
一旦检测到碰撞,比较碰撞方块的颜色,如果相等,则调用.removeFromParent()。如果您发布代码,我可以尝试提供有用的特定方法。
如果你想获得幻想,你可以使用colorTag属性(1 =蓝色,2 =黄色等)为你的方块创建一个子类,然后比较碰撞方块的标签。虽然我怀疑比较颜色的成本是多少。