【发布时间】:2015-04-07 02:03:35
【问题描述】:
好的,所以我对 sprite kit 还很陌生,我正在使用 Swift。我有 2 个精灵节点,savior 和 chicken1。 savior 有一个物理体,我是这样设置的:
var saviorTexture = SKTexture(imageNamed: "1.png")
saviorTexture.filteringMode = SKTextureFilteringMode.Nearest
savior = SKSpriteNode(texture: saviorTexture)
savior.setScale(0.2)
savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
savior.physicsBody?.dynamic = true
savior.physicsBody?.allowsRotation = false
savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))
self.addChild(savior)
chicken1 目前还没有物理体:
var chickenTexture = SKTexture(imageNamed: "block1")
chicken1 = SKSpriteNode(texture: chickenTexture)
chicken1.setScale(0.75)
chicken1.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 1.2)
self.addChild(chicken1)
我需要知道如何在这些对象之间进行碰撞检测(即如果 savior 和 chicken1 触摸,则执行此操作),最好不要将 chicken1 设为物理体。
当我将chicken1 设为物理实体时,它突然变得不稳定并四处移动其他对象。
如果没有办法在没有物理的情况下进行碰撞检测,我怎样才能使chicken1 成为不受任何影响而直接穿过其他物理体的物理体?
编辑**************
所以我关注了beginner swift sprite kit - node collision detection help (SKPhysicsContact) 并拥有:
-
把我的班级改成
SKPhysicsContactDelegate:类 GameScene:SKScene、SKPhysicsContactDelegate {
-
写如下:
self.physicsWorld.contactDelegate = self savior.physicsBody?.categoryBitMask = saviorCategory savior.physicsBody?.contactTestBitMask = animalCategory savior.physicsBody?.collisionBitMask = 0 chicken1.physicsBody?.categoryBitMask = animalCategory chicken1.physicsBody?.contactTestBitMask = saviorCategory chicken1.physicsBody?.collisionBitMask = 0 func didBeginContact(contact: SKPhysicsContact) { var saviorPhysics: SKPhysicsBody var chicken1Physics: SKPhysicsBody if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { saviorPhysics = contact.bodyA chicken1Physics = contact.bodyB } else { saviorPhysics = contact.bodyB chicken1Physics = contact.bodyA } if saviorPhysics.categoryBitMask == 0 && chicken1Physics.categoryBitMask == 1 { self.chicken1.removeFromParent() } }
我运行了它,没有错误,但它不起作用。
【问题讨论】:
标签: swift sprite-kit collision-detection