У меня возникла проблема со следующим кодом комплекта спрайтов. Я пытаюсь определить, когда летающий мяч сталкивается с линией. Однако ничего не происходит, когда они сталкиваются. Однако, когда мяч попадает на край сцены, следующий распечатывается:swift: столкновения с комплектом спрайтов и битовая маска не обнаружены
контакт 1 bitmask1: 4294967295 bitmask2: 4294967295
Проблема 1: Почему не линейные и шаровые столкновения обнаружения? Проблема 2: Почему обе битовой маски одинаковы при столкновении с краем? Я не могу работать с телами, если не знаю, что есть.
struct PhysicsCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let Ball : UInt32 = 0b1 // 1
static let Line : UInt32 = 0b10 // 2
static let Shape : UInt32 = 0b100 // 3 or 4?
}
override func didMoveToView(view: SKView) {
/* Setup your scene here */
physicsWorld.contactDelegate = self
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: view.frame);
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
let ball = SKShapeNode(circleOfRadius: 5)
ball.fillColor = UIColor.whiteColor()
ball.strokeColor = UIColor.whiteColor()
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.frame.size.width/2)
ball.physicsBody?.velocity = CGVector(dx: 200.0, dy: 200.0)
ball.position = CGPoint(x: view.bounds.width/2, y:view.bounds.height/2)
ball.physicsBody?.friction = 0.0;
ball.physicsBody?.restitution = 1.0;
ball.physicsBody?.linearDamping = 0.0;
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.applyImpulse(CGVector(dx:CGFloat(100), dy:CGFloat(100)));
ball.physicsBody?.categoryBitMask = PhysicsCategory.Ball
ball.physicsBody?.dynamic = true
ball.physicsBody?.contactTestBitMask = PhysicsCategory.Line
ball.physicsBody?.collisionBitMask = PhysicsCategory.Line
self.addChild(ball)
}
переопределение функ touchesMoved (штрихами: NSSet, withEvent событие: UIEvent) { /* Вызывается, когда прикосновение начинается */
touch = touches.anyObject() as UITouch!
var linePhysicsBody = SKPhysicsBody()
linePhysicsBody.categoryBitMask = PhysicsCategory.Line
linePhysicsBody.contactTestBitMask = PhysicsCategory.Ball
linePhysicsBody.collisionBitMask = PhysicsCategory.Ball
linePhysicsBody.dynamic = false
linePhysicsBody.usesPreciseCollisionDetection = true
lineNode = SKShapeNode()
lineNode.physicsBody = linePhysicsBody
lineNode.name = "drawingLine"
lineNode.path = linePath
lineNode.lineWidth = 5.0
lineNode.strokeColor = UIColor.redColor()
lineNode.glowWidth = 1.0
self.addChild(lineNode)
}
func didBeginContact(contact: SKPhysicsContact) {
println("contact \(++tempCounter)")
println("bitmask1: \(contact.bodyA.categoryBitMask)")
println("bitmask2: \(contact.bodyA.categoryBitMask)")
}
сейчас я чувствую себя глупо ... Спасибо большое! – user3673836
Нет проблем. Это происходит с каждым разработчиком ;-) – Stefan