[英]How to launch Sprite from above screen in Swift?
我正在用Xcode為iOS編寫游戲,並且試圖從屏幕上方啟動colorSprite,以使其進入視野。
但是,我也形成了一個邊界,以使沒有精靈在外面反彈。
let border = SKPhysicsBody(edgeLoopFrom: self.frame)
結果,當我像這樣應用Impulse時,colorSprite不會進入視圖:
ball.physicsBody?.applyImpulse(CGVector(dx: -20, dy: -20))
一種可能的解決方案是在精靈進入后激活邊框,但我正在制作的游戲要求colorSprite像雨滴一樣不斷從頂部掉落,但一旦進入視野,就必須留在邊框內。
我希望我已在邏輯上進行了解釋,請問解決方案是什么?
使頂部邊框與其他邊框不同:
let borderCategory: UInt32 = 1 << 0
let topBorderCategory: UInt32 = 1 << 1
然后,在update()
,遍歷所有精靈,如果它們向下移動,則阻止它們與頂部邊框碰撞。 如果它們向上移動,請允許它們發生碰撞:
enumerateChildNodes(withName: "//*") { node, _ in
if let sprite = node as? SKSpriteNode {
if (sprite.physicsBody?.velocity.dy)! > CGFloat(0) {
sprite.physicsBody?.collisionBitMask &= ~self.topBorderCategory
}
if (sprite.physicsBody?.velocity.dy)! <= CGFloat(0) {
sprite.physicsBody?.collisionBitMask |= self.topBorderCategory
}
}
}
現在,您有效地有了單向邊界。
PS最好不要在update()
實現,而應作為physicsBody velocity
屬性的屬性觀察器實現,但我無法使其正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.