У меня теперь есть: Большинство моих текущих столкновений узла Sprite работают так, как они должны, за исключением того, что boxNode входит в контакт с floorNode. У меня есть 3 спрастных узла: floorNode, playerNode и boxNode. PlayerNode отскакивает в воздухе, когда пользователь нажимает экран, и boxNode (ы) появляются из потолка и падают, пока не вступают в контакт с floorNode.Swift 3 Sprite Node Contact/Collision не работает должным образом
Проблема: столкновение, с которым у меня возникли проблемы, когда 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()
}
}
}
Ваш фрагмент кода запутан, поскольку отступы перепутаны (возможно, когда вы его скопировали), но также он выглядит частичным. Пожалуйста, разместите свой метод делегирования с полным контактом, I.e. func didBegin (_ контакт: SKPhysicsContact) {... –
Привет @AliBeadle, я обновил свой код и исправил отступы, поэтому, надеюсь, теперь его немного легче читать. Спасибо за ваш ответ. –