我現在有什麼:除了boxNode與floorNode接觸外,我當前的大多數Sprite節點碰撞都按照他們應該的方式工作。我有3個精靈節點:floorNode,playerNode和boxNode。當用戶點擊屏幕時,playerNode在空中彈跳,boxNode從天花板上產生並下落,直到與floorNode接觸。斯威夫特3 Sprite節點接觸/碰撞行爲不正常
問題:Im有問題的碰撞是當boxNode與floorNode發生碰撞時。當boxNode與floorNode接觸時,遊戲結束,當發生的一切是boxNode在與floorNode碰撞時消失。
playerNode與floorNode =遊戲碰撞過
boxNode與playerNode =遊戲碰撞過
boxNode與floorNode =(當該碰撞發生時,遊戲結束)碰撞不應導致遊戲結束。
這是我當前的代碼:
import UIKit
import SpriteKit
import SceneKit
import Foundation
import CoreData
import GameplayKitstruct
ColliderType {
static let blueBallCategory: UInt32 = 0x1 << 0
static let floorNode: UInt32 = 0x1 << 1
static let firstBody: UInt32 = 0x1 << 2
static let secondBody: UInt32 = 0x1 << 3
static let boxNodeCategory: UInt32 = 0x1 << 4
}
class GameScene: SKScene, SKPhysicsContactDelegate {
floorNode.contactTestBitMask = 0
floorNode.categoryBitMask = ColliderType.floorNodeCategory
floorNode.collisionBitMask = ColliderType.playerNodeCategory | ColliderType.boxNodeCategory
self.physicsBody = floorNode
self.physicsBody?.friction = 0
playerNode.physicsBody?.categoryBitMask = ColliderType.playerNodeCategory
playerNode.physicsBody?.contactTestBitMask = 0
playerNode.physicsBody?.collisionBitMask = ColliderType.floorNodeCategory
boxNode.physicsBody?.categoryBitMask = ColliderType.boxNodeCategory
boxNode.physicsBody?.contactTestBitMask = ColliderType.playerNodeCategory | ColliderType.floorNodeCategory
boxNode.physicsBody?.collisionBitMask = 0
func didBegin(_ contact:SKPhysicsContact) {
let firstBody = contact.bodyA
let secondBody = contact.bodyB
if firstBody.categoryBitMask == ColliderType.playerNodeCategory || secondBody.categoryBitMask == ColliderType.boxNodeCategory{
self.boxNode.removeFromParent()
gameOver = true
self.speed = 0
timer.invalidate()
}else if firstBody.categoryBitMask == ColliderType.floorNodeCategory || secondBody.categoryBitMask == ColliderType.floorNodeCategory {
gameOver = true
self.speed = 0
timer.invalidate()
}else if firstBody.categoryBitMask == ColliderType.boxNodeCategory || secondBody.categoryBitMask == ColliderType.floorNodeCategory{
self.boxNode.removeFromParent()
}else if contact.bodyA.categoryBitMask == ColliderType.boxNodeCategory{
contact.bodyA.node!.removeFromParent()
}else if contact.bodyB.categoryBitMask == ColliderType.boxNodeCategory{
contact.bodyB.node!.removeFromParent()
gameOver = true
self.speed = 0
timer.invalidate()
}
}
}
您的代碼片段令人困惑,因爲縮進被搞砸了(可能在您複製它時),但它看起來也是部分的。請發佈您的完整聯繫人處理委託方法,即, func didBegin(_ contact:SKPhysicsContact){... –
Hi @AliBeadle,我更新了我的代碼並修復了縮進,所以希望現在它更容易閱讀。謝謝您的回覆。 –