В настоящее время я работаю над приложением iOS, написанным в Swift, используя технологию игры SpriteKit. В этой игре капли дождя падают с верхней части экрана вниз. Когда они попадают в нижнюю часть, которая представлена physicsBody
, они должны вернуться в исходное положение в верхней части экрана, чтобы анимация продолжалась в течение всей жизни игры.Создание анимации дождя с физикой
Поскольку мне нужно лишь несколько капель я создаю их, как это:
let drop = SKSpriteNode(imageNamed: "drop")
drop.position = CGPointMake(x,y)
drop.physicsBody = SKPhysicsBody(rectangleOfSize: drop.size)
addChild(drop)
Затем я создаю битмаски:
drop.physicsBody!.categoryBitmask = DropCategory
bottom.physicsBody!.categoryBitmask = BottomCategory
drop.physicsBody!.contactTestBitmask = BottomCategory
Я добавить функцию didBeginContact и я получить уведомление, когда падение попадает в нижнюю часть. Затем моя консоль отображает «hit ground».
func didBeginContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if firstBody.categoryBitMask == BlockCategory && secondBody.categoryBitMask == GroundCategory {
println("hit ground")
firstBody.node?.removeFromParent()
let drop = SKSpriteNode(imageNamed: "drop")
drop.name = "testNode"
drop.position = CGPointMake(self.frame.width - self.frame.width/3*2, self.frame.height) // At start Position
drop.physicsBody = SKPhysicsBody(rectangleOfSize: drop.size)
drop.physicsBody?.categoryBitMask = BlockCategory
drop.physicsBody?.contactTestBitMask = GroundCategory
addChild(drop)
}
}
Однако положение капли не изменяется. Синтаксической ошибки нет, так что в чем моя проблема?
Если я заменяю это:
firstBody.node!.position = CGPointMake(x, y)
с этим:
firstBody.applyImpulse(CGVector)
это дает падение импульсную. Как я могу сделать первый вариант работы?
Вы пробовали настройки массы для тела физики капли? –
Почему бы не использовать эмиттер частиц? Существует даже шаблон дождя, который вы можете выбрать при создании нового файла частиц в XCode. – prototypical
Кроме того, хотя я считаю, что использование физической системы является излишним для того, что вы пытаетесь сделать, капли не нуждаются в импульсе. Капли просто пострадали бы от гравитации. – prototypical