【问题标题】:Swift 3 Beginner - Position Assets in SceneSwift 3 Beginner - 在场景中定位资产
【发布时间】:2017-02-16 09:32:33
【问题描述】:

我是 Swift 3 和一般编程的初学者,所以这将是一个非常基本的问题。

我一直在关注教程,目前正在使用 CGPoint 定位 SpriteNode。本教程建议将节点放置在屏幕底部的中心位置:

Ground.position = CGPoint(x: self.frame.width / 2, y: 0)

但是,这会导致它粘在屏幕的右上角。

当我使用以下代码时:

Ground.position = CGPoint(x: 0 - self.frame.width / 2, y: 0 - self.frame.height / 2)

它按预期定位在底部中心。

我不明白为什么会发生这种情况,因为此时教程中几乎没有做任何其他事情来导致错误。

【问题讨论】:

  • 您应该为您的问题添加更多代码,它太宽泛了。什么是地面比例尺,anchorPoint?原点?

标签: swift sprite-kit cgpoint


【解决方案1】:

将场景的anchorPoint设置为didMove(toView: SKView)开头的左下角(或GameViewController):

scene.anchorPoint = CGPoint(x: 0, y: 0)

请记住,您放置在场景中的所有内容都是基于anchorPoint 放置的。所以有了这个anchorPoint,你的场景的原点是左下角。

另外请注意,如果您使用.AspectFill 作为您的sceneScaleMode,则不必使用self.frame,而是将场景大小设置为 768x1024(纵向)/1024x768(横向)然后只需使用数字场景大小内的值。

此外,将场景anchorPoint 设置为中心还有一些好处:

scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)

这使得场景更容易适应 iPad 和 iPhone 的大小,并且还简化了居中节点。

有关使您的应用程序通用的更多信息,请参阅此链接:iOS Universal Device App with SpriteKit, how to scale nodes for all views?

【讨论】:

  • 所以,全局设置 anchorPoint 给了我更多的控制权,谢谢。如果我选择删除 .AspectFill 并使用精确值,这是否会缩放到不同的显示?
  • @MartinJones 使用 .AspectFill 可以缩放场景以适应所有尺寸。那时您将使用精确值,因为它可以扩展到设备的任何大小。有关更多信息,请参阅此链接:stackoverflow.com/q/34864533/6728196
  • @Confused 您可以在 GameViewController 和/或您希望它影响的每个场景中设置它。尝试在场景中进行任何放置之前调用它,因为调用之前的任何内容都不会受到它的影响。
  • @Confused 是的。当我说 1024x1024 时,我的意思是仅用于背景图像。对困惑感到抱歉。这样,背景不会被拉伸到更大的 iPad 尺寸,并且适合 iPad 的尺寸,并且图像的侧面(或横向的顶部边缘)在 iPhone 上被截断
  • @Nik 也是另一个原因,在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多