1
我想做一個簡單的SpriteKit遊戲。屏幕上有兩個精靈。其中之一是射擊激光槍。當激光穿過屏幕時,應該錯過。 子彈和精靈不相互接觸,但接觸檢測功能呼叫。我不知道是怎麼回事?我使用SkAction func從上層精靈射擊。所有的精靈和激光槍都有不同的UInt32分類掩碼值。爲什麼sprites彼此接觸,雖然他們不碰撞?
感謝您的幫助。
var sprite = SKSpriteNode(imageNamed: "Spaceship")
var sprite02 = SKSpriteNode(imageNamed: "Spaceship")
var actionMove = SkAction.scaleYTo(12, duration: 0.5)
sprite.position = CGPoint(x: self.frame.width/2, y: self.frame.height * 3/4)
sprite.yScale = 0.2
sprite.xScale = 0.2
sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
sprite.physicsBody!.dynamic = true
sprite.physicsBody!.affectedByGravity = false
sprite.physicsBody!.categoryBitMask = BodyType.ship02.rawValue
sprite.physicsBody!.contactTestBitMask = BodyType.laser.rawValue
sprite.physicsBody!.collisionBitMask = 0
self.addChild(sprite)
sprite02.position = CGPoint(x: self.frame.width/2, y: self.frame.height * 1/4)
sprite02.yScale = 0.2
sprite02.xScale = 0.2
sprite02.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
sprite02.physicsBody!.dynamic = true
sprite02.physicsBody!.affectedByGravity = false
sprite02.physicsBody!.categoryBitMask = BodyType.ship01.rawValue
sprite02.physicsBody!.contactTestBitMask = BodyType.laser.rawValue
sprite02.physicsBody!.collisionBitMask = 0
self.addChild(sprite02)
我正在檢查像這樣的接觸檢測。
func didBeginContact(contact: SKPhysicsContact) {
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
println(contactMask)
}
// Laser gun properties
func laserNode(positionNode: CGPoint, rotationNode: CGFloat, name: String) -> SKSpriteNode {
var laser = SKSpriteNode()
laser.color = UIColor.greenColor()
laser.position = positionNode
laser.anchorPoint = CGPoint(x: 0.0, y: 0.0)
laser.size = CGSize(width: 3, height: 50)
laser.zPosition = -1
laser.zRotation = rotationNode
laser.name = name
laser.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: laser.size.width * 2, height: laser.size.height*2))
laser.physicsBody!.dynamic = true
laser.physicsBody!.affectedByGravity = false
laser.physicsBody!.categoryBitMask = BodyType.laser.rawValue
laser.physicsBody!.contactTestBitMask = BodyType.ship01.rawValue | BodyType.ship02.rawValue | BodyType.ship03.rawValue | BodyType.ship04.rawValue
laser.physicsBody!.collisionBitMask = 0
laser.runAction(actionMove)
laserArray.append(laser)
self.addChild(laser)
return laser
}
我嘗試這個但不工作。存在一些問題。感謝您的評論。 –
在你的'didMoveToView()'函數中打開'view.showsPhysics = true'來查看你的物理邊界存在的位置 –
我的猜測是你的界限是錯誤的,而不是你計算檢測的方式 –