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