繁体   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