Я настраиваю основные физические тесты для прототипа игры, которую я разрабатываю, но collisionBitMask работает неправильно. Я хочу, чтобы charSprite сталкивался с floorSprite и НЕ отбрасывал его в забвение (из-за силы тяжести), поэтому я назначаю charSprite категориюBitMask для Test1 и collisionBitMask для Test2 и наоборот для floorSprite. Это отлично работает, когда Test1 = 0 и Test2 = 0b10, но когда я пытаюсь изменить значения Test1 и Test2, скажем, 0b20 и 0b30, или любые другие значения, отличные от 0 и 0b10, это не работает, и floorSprite сбрасывается вниз к забвению charSprite. Это проблема, потому что я хочу больше, чем просто две категории для бит-масок, и работают только значения 0 и 0b10, и даже тогда она работает только тогда, когда charSprite имеет категориюBitMask 0 и collisionBitMask 0b10, а floorSprite - 0b10,0. Он даже не работает, когда charSprite имеет категориюBitMask из 1, а collisionBitMask 0 и floorSprite - 0,0b10! Я не могу найти значения для моих бит-масок, которые работают! Может кто-нибудь мне помочь? Вот мой код:Значения Swift CollisionBitMask с SpriteKit не работают
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
struct ColliderType {
static let Test1: UInt32 = 0
static let Test2: UInt32 = 0b10
}
var charSprite:SKSpriteNode!
override func didMoveToView(view: SKView) {
/* Setup your scene here */
println("Running")
self.physicsWorld.contactDelegate = self
self.physicsWorld.gravity = CGVectorMake(0, -2)
// Add sprites
charSprite = SKSpriteNode(imageNamed: "MainCharacterTest")
charSprite.position = CGPoint(x: self.size.width/2 - 300, y: self.size.height/2 + 200)
charSprite.zPosition = 1
charSprite.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: charSprite.size.width, height: charSprite.size.height))
charSprite.physicsBody?.allowsRotation = false
charSprite.physicsBody?.dynamic = true
charSprite.physicsBody?.categoryBitMask = ColliderType.Test2
charSprite.physicsBody?.collisionBitMask = ColliderType.Test1
charSprite.physicsBody?.contactTestBitMask = ColliderType.Test1
self.addChild(charSprite)
let floorSprite = SKSpriteNode(imageNamed: "testthing")
floorSprite.position = CGPoint(x: self.size.width/2, y: self.size.height/2 - 200)
floorSprite.zPosition = -1
floorSprite.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: floorSprite.size.width * 1, height: floorSprite.size.height * 1))
floorSprite.physicsBody?.affectedByGravity = false
floorSprite.physicsBody?.categoryBitMask = ColliderType.Test1
floorSprite.physicsBody?.collisionBitMask = ColliderType.Test2
floorSprite.physicsBody?.contactBitMask = ColliderType.Test2
self.addChild(floorSprite)
func didBeginContact(contact: SKPhysicsContact) {
if let node1 = contact.bodyA.node {
// charSprite.removeFromParent()
// self.addChild(gameover)
}
}
func didEndContact(contact: SKPhysicsContact) {
// pass
}
}
вместо структуры, вы имели в виду перечисление? – Siriss
Нет - учебник, который я узнал из использованных структур. Должен ли я использовать перечисление? – flysaiah
Я просто попытался использовать перечисление, но он все еще не работает, к сожалению. – flysaiah