我試圖解決一個問題,一個精靈節點可以跳過一個平臺,但不能跳回來。我嘗試使用這個代碼:打開和關閉物理
override func didMove(to view: SKView) {
if (thePlayer.position.y > stonePlatform1.position.y) == true {
stonePlatform1.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: stonePlatform.size.width * 0.9, height: stonePlatform.size.height * 0.75))
stonePlatform1.physicsBody!.isDynamic = false
stonePlatform1.physicsBody!.affectedByGravity = false
stonePlatform1.physicsBody!.categoryBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.contactTestBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.restitution = 0.4
}
}
這個想法是當玩家在平臺上方時打開平臺的物理體。然而,當我使用這個代碼時,物理學根本不起作用。事實上,我嘗試使用此代碼:
override func didMove(to view: SKView) {
if (thePlayer.position.y < stonePlatform1.position.y) == true {
stonePlatform1.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: stonePlatform.size.width * 0.9, height: stonePlatform.size.height * 0.75))
stonePlatform1.physicsBody!.isDynamic = false
stonePlatform1.physicsBody!.affectedByGravity = false
stonePlatform1.physicsBody!.categoryBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.contactTestBitMask = BodyType.object.rawValue
stonePlatform1.physicsBody!.restitution = 0.4
}
}
並且物理無法打開。如果IF語句不存在,那麼物理學一直都在工作。
爲什麼不簡單地使用collisionBitMask而不是每次重新創建物理體呢? – BadgerBadger
我之前也做過這個,但我總是最好看看整個身體。此外,像這樣的場景通常需要改變多個值,例如contactTest,碰撞,質量等。這樣做解決了所有這些問題。 – TheValyreanGroup
這樣做會破壞別的東西的碰撞。如果敵人在那裏行走會怎樣?它會隨着玩家的傳球而下降。必須有一個更簡單的方法來做到這一點。只需將函數中的值更改即可。這也會更有效率。 – BadgerBadger