iOS 横向定位问题 Swift SpriteKit

iOS landscape positioning problems Swift SpriteKit

出于某种原因,我无法将节点放置在屏幕的顶部或底部。我以前可以使用 self.frame.height / 2 来很好地做到这一点,但现在我在景观中工作,这行代码不起作用。 注意:我的锚点是 0.5, 0.5,我的缩放模式是 .aspectFill 感谢您的帮助。

这可能与场景的纵横比和使用 .aspectFill 有关。

当您使用 .aspectFill 时,SpriteKit 会调整场景大小以在水平和垂直方向从边到边填充视口,但不会拉伸它。这意味着对于横向,除非您设计了一个特别浅的场景,否则您最终可能会 "cropping" 离开场景的顶部和底部。

换句话说,您遇到的是信箱化的对立面。场景的宽高是固定的,当设备尺寸和纵横比不同时,"overflows"一轴离屏。在您的情况下,它可能会从顶部和底部溢出场景,以便左右填充您的场景。

有一些策略可以解决这个问题。

首先,您可以选择不同的scaleMode。例如,.aspectFit 可能 return 您的身高计算结果符合您的预期,但它的代价是还包括左侧和右侧的信箱,这可能不是您想要的,但也许。

其次,您可以计算新的场景大小以匹配视口的纵横比。这将为您提供您期望的两个方向的行为,但这也意味着您的场景的宽高比会根据播放它的设备而变化,这将需要您调整游戏玩法和场景布局以适应这种可变形状.这是很多工作,但它通常是最好的解决方案。 (一种解决方案是调整场景大小,然后让 "real scene" 居中,但对于某些游戏类型而言,这可能会令人不满意且存在问题。)

第三,您可以使用简单地将场景缩放到视口的scaleMode。根据设备的不同,这会导致一些 squishing/stretching,所以这通常不是一个很好的选择,但根据您制作的游戏类型,这可能是一个选择。