Я пытался выяснить, почему мой метод didBeginContact
не работает. У меня треугольник, падающий с верхней части экрана на дно, и у меня есть линия внизу, которая, если она сталкивается с ней. Мой счет должен увеличиваться. Вот код, ответственный за это.Тесты на столкновение, не работающие в SpriteKit Swift 2
func createScene(){
physicsWorld.contactDelegate = self
slider = SKSpriteNode(imageNamed: "Slider")
slider.setScale(0.20)
slider.position = CGPoint(x: self.frame.width/2, y: 0 + slider.frame.height/2)
slider.physicsBody = SKPhysicsBody(rectangleOfSize: slider.size)
slider.physicsBody?.categoryBitMask = PhysicsCatergory.slider
slider.physicsBody?.collisionBitMask = PhysicsCatergory.coin | PhysicsCatergory.greenTriangle | PhysicsCatergory.orangeHexagon | PhysicsCatergory.purpleOctagon | PhysicsCatergory.redSquare
slider.physicsBody?.contactTestBitMask = PhysicsCatergory.coin | PhysicsCatergory.greenTriangle | PhysicsCatergory.orangeHexagon | PhysicsCatergory.purpleOctagon | PhysicsCatergory.redSquare
slider.physicsBody?.affectedByGravity = false
slider.physicsBody?.dynamic = false
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("SpawnShapes"), userInfo: nil, repeats: true)
self.addChild(slider)
}
func didBeginContact(contact: SKPhysicsContact) {
let firstBody = contact.bodyA
let secondBody = contact.bodyB
if firstBody.categoryBitMask == PhysicsCatergory.greenTriangle && secondBody.categoryBitMask == PhysicsCatergory.Score{
score++
print(score)
}
else if firstBody.categoryBitMask == PhysicsCatergory.Score && secondBody.categoryBitMask == PhysicsCatergory.greenTriangle{
score++
print(score)
}
}
override func didMoveToView(view: SKView) {
createScene()
invisibleBounderies()
}
func invisibleBounderies(){
let scoreNode = SKSpriteNode()
scoreNode.size = CGSize(width: 5, height: 600)
scoreNode.position = CGPoint(x: self.frame.width/2, y: self.frame.height/10)
scoreNode.physicsBody = SKPhysicsBody(rectangleOfSize: scoreNode.size)
scoreNode.physicsBody?.affectedByGravity = false
scoreNode.physicsBody?.dynamic = false
scoreNode.physicsBody?.categoryBitMask = PhysicsCatergory.Score
scoreNode.physicsBody?.collisionBitMask = PhysicsCatergory.greenTriangle
scoreNode.physicsBody?.contactTestBitMask = PhysicsCatergory.greenTriangle
scoreNode.zRotation = CGFloat(M_PI/2.0)
scoreNode.color = SKColor.blueColor()
self.addChild(scoreNode)
}
func SpawnShapes(){
greenTriangle = SKSpriteNode(imageNamed:"greenTriangle")
purpleOctagon = SKSpriteNode(imageNamed: "purpleOctagon")
redSquare = SKSpriteNode(imageNamed: "redSquare")
coin = SKSpriteNode(imageNamed: "coin")
greenTriangle.physicsBody = SKPhysicsBody(rectangleOfSize: greenTriangle.size)
greenTriangle.physicsBody?.categoryBitMask = 0
greenTriangle.physicsBody?.collisionBitMask = PhysicsCatergory.Score
greenTriangle.physicsBody?.contactTestBitMask = PhysicsCatergory.Score
greenTriangle.physicsBody?.affectedByGravity = false
greenTriangle.physicsBody?.dynamic = false
var MinValue = self.size.width/8
var MaxValue = self.size.width - 150
var SpawnPoint = UInt32(MaxValue - MinValue)
let action = SKAction.moveToY(-30, duration: 2.0)
slider.zPosition = 1
coin.zPosition = 2
greenTriangle.zPosition = 3
orangeHexagon.zPosition = 4
purpleOctagon.zPosition = 5
redSquare.zPosition = 6
greenTriangle.position = CGPoint(x: CGFloat(arc4random_uniform(SpawnPoint)), y: self.size.height)
self.addChild(greenTriangle)
greenTriangle.runAction(SKAction.repeatActionForever(action))
}
за все, что связано с столкновениями? – cuber
Я изменил динамические свойства 'greenTriangle' и' scoreNode' равными true, и оценка не увеличивается. и когда greenTriangle попадает в строку scoreNode, он отстает от него. – cuber
@SteveIves, нединамические элементы могут иметь на них физические тесты, они просто не могут вызывать вызовы физики. – Knight0fDragon