我目前正在使用SpriteKit遊戲技術開發一個用Swift編寫的iOS應用程序。在這場比賽中,雨滴從屏幕頂部下降到底部。當他們擊中底部時,以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功能,我得到通知時下降擊中底部。然後我的控制檯顯示「撞地」。
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)
它賦予了下降的衝動。我怎樣才能使第一個選項工作?
你試過設置(質量)的下降物理身體? – 2015-02-08 17:52:16
爲什麼不使用粒子發射器?在XCode中創建新的粒子文件時,您甚至可以選擇一個下雨模板。 – prototypical 2015-02-08 18:07:33
另外,儘管我認爲使用物理系統對於你想要做的事情來說是過分的,但這些下降不應該需要衝動。水滴會受到重力的影響。 – prototypical 2015-02-08 18:14:02