停止 SKSpriteNode 离开视图 (Swift)
Posted
技术标签:
【中文标题】停止 SKSpriteNode 离开视图 (Swift)【英文标题】:Stop SKSpriteNode from leaving view (Swift) 【发布时间】:2014-10-09 17:01:01 【问题描述】:您好,我想防止 SKSpriteNode 离开屏幕或让节点在碰到屏幕边框时弹回。是否也可以在到达边界时调用函数?
如果发现这个问题Click
他在哪里使用此代码:
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = borderBody
borderBody.friction = 0.0
borderBody.restitution = 1.0
但由于某种原因,它只会阻止我的节点(它是动态的)移出顶部和底部,但它能够移出侧面。
(请记住,我是 SpriteKit 和 Swift 的新手)
编辑:我找到了这段代码:
extension GameScene: SKPhysicsContactDelegate
func didBeginContact(contact: SKPhysicsContact!)
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch (contactMask)
case BodyType.pipe.toRaw() | BodyType.bomb.toRaw():
println("Contact with a bomb")
if contact.bodyA.categoryBitMask == BodyType.pipe.toRaw()
explode(pipe: contact.bodyA.node as SKSpriteNode)
else
explode(pipe: contact.bodyB.node as SKSpriteNode)
case BodyType.pipe.toRaw() | BodyType.bird.toRaw():
println("Contact with a pipe")
bird.pushDown()
case BodyType.ground.toRaw() | BodyType.bird.toRaw():
println("Contact with ground")
for actor in actors
actor.stop()
let shakeAction = SKAction.shake(0.1, amplitudeX: 20)
screenNode.runAction(shakeAction)
default:
return
我读到它类似于设置类别?这段代码好用吗?
【问题讨论】:
您必须查看碰撞检测。请参阅 Apple 的文档:developer.apple.com/library/ios/documentation/GraphicsAnimation/… 您的场景比您的视野大。尝试在 GameViewController.swift 中将 scaleMode 从 .AspectFill 更改为 .ResizeFill。 @0x141E,我尝试了你的建议,它使屏幕左侧弹回,但在右侧它不起作用..? 更改你的物理体声明以使用视图的框架而不是场景的框架:let borderBody = SKPhysicsBody(edgeLoopFromRect: view.frame) @0x141E,由于通用视图控制器不起作用 【参考方案1】:将物理体设置为屏幕大小
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
【讨论】:
嘿,我正在做一个横向卷轴游戏,有没有办法让这个物理体移动并在玩家移动时跟随玩家?【参考方案2】:是的,这是可能的。
您必须设置一个 SKNode,其物理体类型为 rect,并为其设置 self.size 的大小。这将为屏幕边框创建一个物理体。
那么你必须在上面SKNode的物理体上设置一个categorybitmask。这是我们识别物理体的一种方式。
然后你必须给上面的 SKNode 一个碰撞位掩码,它等于你不想离开屏幕的节点的 categorybitmask。这会使节点崩溃到边界并反弹回来。
最后,如果将其中一个的contacttestbitmask设置为另一个的categorybitmask。将运行苹果函数“didBeginContact”,您可以在其中执行一些操作。
希望有帮助!
【讨论】:
以上是关于停止 SKSpriteNode 离开视图 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
SKSpriteNode 从场景中移除后如何停止音频(Swift)?