我使用SpriteKit在XCode中製作遊戲。遊戲中有一名玩家和他必須避免的不同類型的射彈。當玩家與射彈碰撞時,分數改變並且射彈消失。但是,當兩枚彈丸碰撞時,它們會彈開。 我希望每次發生兩次射彈碰撞時,它們都像沒有發生任何事情一樣行動,並且繼續沿着原始路徑前進。我該怎麼辦?SpriteKit中的精靈之間的碰撞
*注意:這不是整個代碼,它只是重要的。
import SpriteKit
struct Physics {
static let player : UInt32 = 1
static let missileOne : UInt32 = 2
static let missileTwo : UInt32 = 3
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var player = SKSpriteNode(imageNamed: "p1.png")
override func didMoveToView(view: SKView) {
physicsWorld.contactDelegate = self
player.position = CGPointMake(self.size.width/2, self.size.height/5)
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
player.physicsBody?.affectedByGravity = false
player.physicsBody?.dynamic = false
player.physicsBody?.categoryBitMask = Physics.player
player.physicsBody?.collisionBitMask = Physics.missileOne
player.physicsBody?.collisionBitMask = Physics.missileTwo
var missileOneTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("SpawnMissileOne"), userInfo: nil, repeats: true)
var missileTwoTimer = NSTimer.scheduledTimerWithTimeInterval(1.2, target: self, selector: Selector("SpawnMissileTwo"), userInfo: nil, repeats: true)
self.addChild(player)
}
//When contact happens
func didBeginContact(contact: SKPhysicsContact) {
var firstBody : SKPhysicsBody = contact.bodyA
var secondBody : SKPhysicsBody = contact.bodyB
if ((firstBody.categoryBitMask == Physics.player) && (secondBody.categoryBitMask == Physics.missileOne)) {
CollisionWithMissileOne(firstBody.node as SKSpriteNode, missileOne: secondBody.node as SKSpriteNode)
} else if ((firstBody.categoryBitMask == Physics.player) && (secondBody.categoryBitMask == Physics.missileTwo)){
CollisionWithMissileTwo(firstBody.node as SKSpriteNode, missileTwo: secondBody.node as SKSpriteNode)
} else if ((firstBody.categoryBitMask == Physics.missileOne)&&(secondBody.categoryBitMask == Physics.missileTwo)) {
CollisionBetweenMissiles(firstBody.node as SKSpriteNode, missileTwo: secondBody.node as SKSpriteNode)
}
}
//For Player and MissileOne
func CollisionWithMissileOne(player: SKSpriteNode, missileOne: SKSpriteNode) {
missileOne.removeFromParent()
}
//For Player and MissileTwo
func CollisionWithMissileOne(player: SKSpriteNode, missileTwo: SKSpriteNode) {
missileTwo.removeFromParent()
}
//For MissileOne and MissileTwo
func CollisionBetweenMissiles(missileOne: SKSpriteNode, missileTwo: SKSpriteNode) {
???WHAT SHOULD I CODE HERE???
}
}
感謝您的答案,但它改變了一切!請你(或其他人)向我解釋如何使兩枚導彈相互通過而不發生碰撞? – Gabe12
它並沒有真正改變一切,你仍然可以保持你的didBeginContact功能,因爲它是例如。如果你不想使用我的建議,那很好,但你仍然需要使用contactBitMask而不是collisionBitMask。對於你的問題,很簡單:''missileSprite.physicsBody.collisionBitMask = 0' –
所以你唯一需要從我的答案中拿走的東西是用'contact'而不是'collisionBitMasks'來檢查(你指的是什麼)爲碰撞。此外,BitMasks,需要有適當的BitMask值(1,2,4,8)等,以便與BitWise或... –