繁体   English   中英

iOS横向定位问题Swift SpriteKit

[英]iOS landscape positioning problems Swift SpriteKit

由于某种原因,我无法将节点放置在屏幕的顶部或底部。 我曾经能够使用self.frame.height / 2做到这一点,但是现在我在横向环境中工作,这行代码不起作用。 注意:我的锚点是0.5、0.5,我的缩放模式是.aspectFill感谢您的所有帮助。

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

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

换句话说,您遇到的是相反的操作。 场景的宽度和高度是固定的,并且当设备尺寸与宽高比不同时,它将“溢出”一个轴离开屏幕。 在您的情况下,可能是场景从顶部和底部溢出,以便左右填充场景。

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

首先,您可以选择一个不同的scaleMode。 例如,.aspectFit可能会将您的身高计算返回到您期望的值,但是这样做的代价是还需要在左右包括信箱,这也许不是您想要的,但是也许。

其次,您可以计算新的场景大小以匹配视口的宽高比。 这将使您在两个方向上都具有预期的行为,但这也意味着您的场景的纵横比会根据所播放的设备而有所不同,这将要求您调整游戏方式和场景布局以适应这种可变的形状。 这是很多工作,但通常是最好的解决方案。 (一种解决方案是调整场景的大小,但将“真实场景”居中放置在中间,但这对于某些游戏类型可能不令人满意且存在问题。)

第三,您可以使用仅将场景缩放到视口的scaleMode。 根据设备的不同,这将导致一些挤压/拉伸,因此通常不是一个很好的选择,但是根据您制作的游戏类型,这可能是一个选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM