ios - 我如何在 Swift 2 中获得 SKSpriteNode 的真正中心?

标签 ios swift sprite-kit

我试图找出我的 Sprite 的中心,我使用了一个足球 Sprite,将大小更改为 120 x 120。 我设法获得了触摸位置。

获得中心的方法应该是 sprite.origin.x + (sprite.width/2),但由于某些原因,我得到的值是没有意义的。因为无论我在哪里触摸球,触摸 location.x 总是小于 Sprite 中心,即使例如我触摸了球的右侧,所以 location.x 应该 > sprite.center。 x.

这是获取球中心点的小代码

let ballCenter = CGVectorMake(ball.position.x + (ball.frame.width / 2),
                              ball.position.y + (ball.frame.height / 2))

但是当我像这样打印结果时,总是会转到“真实”的情况。

 if location.x < ballCenter.dx {
     print("touched on left of ball ", location.x, location.y)
 }else{
     print("touched on right of ball ", location.x, location.y)   
 }

这让我发疯,谁能帮助我理解这一点? Sprite 原点不是在左下角吗?

还有,为什么场景框这么小?当我使用 iPhone 6S 时,我看到我的屏幕宽度是 375.0,屏幕高度是 667.0,它不应该更大吗?这太令人困惑了。

提前致谢。

最佳答案

默认情况下,SpriteNode 的原点位于 Sprite 的中心。如果你想获得节点的中心,只需使用 let ballCenter = sprite.position - 这将为你提供一个 CGPoint 来使用。然后,您可以使用 ballCenter.xballCenter.y 访问 x 和 y 坐标。

此外,如果您想要像目前使用 ballCenter 那样创建一个点,请使用 CGPointMake() 而不是 CGVectorMake().

关于ios - 我如何在 Swift 2 中获得 SKSpriteNode 的真正中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016294/

相关文章:

ios - UIView子类重绘UIBezierPath而不重绘整个 View

swift - Sprite Kit SKLabel 未显示在背景图片上

ios - 来自 SKEmitterNode 的动画粒子

swift - 无法从场景编辑器引用 SKSpriteNode 到代码

iOS 音频单元混响流格式问题 -10868 kAudioUnitErr_FormatNotSupported

ios - 根据 Swift 大小调整 UILabel 大小

ios - 在移动应用程序中保留 SSL 证书的最佳方式

iOS UITextView 无序/有序列表,如 Notes App

swift - 在 iOS userInfo 上使用 Swift 的 Decodable

iOS Swift 和 MySQL 数据库