ios - Sprite 离开屏幕边界

标签 ios iphone swift sprite-kit

我在 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/

相关文章:

ios - Playground 执行失败 : <EXPR>:15:33: error: type 'Int' does not conform to protocol 'BooleanType'

iphone - 如何从底部对齐 UILabel 文本?

ios - 在 Webview 的末尾,显示一条下划线。如何去除 IOS 8 beta 中的下划线?

iphone - 如何更新或发送 int 到正在进行的 View Controller

ios - Swift - 在 UICollectionView 中点击时如何使单元格缩小效果(如 ios 12 快捷方式应用程序和 App Store 应用程序)

ios - Objective-C 中错误的接收器类型 'AVMediaType'

ios - 应用程序在负载终止时崩溃,并出现 NSException 类型的未捕获异常

ios - 如何告诉 UITableView 自调整单元格的高度即将改变?

ios - CollectionView 底部的阴影

iphone - 使用 drawRect 自定义 UITableViewCell 的编辑模式