簡體   English   中英

如何在Swift的屏幕上方啟動Sprite?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM