我在 didMoveToView
中添加了以下内容:
var ground = SKNode()
ground.position = CGPointMake(0, 0)
ground.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
ground.physicsBody?.dynamic = false
ground.physicsBody?.friction = 1
self.addChild(ground)
在 touchesBegan
中,我添加了以下内容:
mainChar.physicsBody?.velocity = CGVectorMake(0, 0)
mainChar.physicsBody?.applyImpulse(CGVectorMake(85, 0))
其中 mainChar 是之前定义的 SKSpriteNode。我通过改变 y 方向上的 applyImpulse 的方向来测试上面的代码,发现 mainChar 没有超出屏幕的顶部。但是,当我将其保留为 85 或将其更改为 -85 时,它会从屏幕的左右两侧消失。
我可以做些什么来确保 mainChar 保持在屏幕的绑定(bind)框内?
谢谢。
最佳答案
很可能您的场景与您的框架大小不同,并且您正在使用 .AspectFill
。
如果您打开物理调试,您会注意到顶部和底部或左侧和右侧都有一条绿线。
skView.showsPhysics = true
如果你这样做...
scene.scaleMode = .AspectFit
一切都可能会神奇地工作,但你会注意到一些黑条
如果您在 didMoveToView 中打印(如果是 .AspectFill)
println("\(self.frame)")
println("\(view.frame)")
您可能会看到您正试图将一个非常大的场景放入一个小 View 中。您的场景会缩小到您的 View 中,但大小保持不变。这会导致一些东西被切断(甚至是你的接地节点)你将不得不做一些数学计算来弄清楚顶部和底部被切断的是什么。之后,您将需要基于它创建一个框架并偏移您的节点。
抱歉,我无法为您计算,但我想,如果我至少让您指出了正确的方向,并且您知道原因,那么您可能会想出其余的。
关于ios - Sprite 离开屏幕边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29460754/