iOS横屏定位问题Swift SpriteKit

Posted

技术标签:

【中文标题】iOS横屏定位问题Swift SpriteKit【英文标题】:iOS landscape positioning problems Swift SpriteKit 【发布时间】:2017-11-27 01:25:37 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

非常感谢。这几天我一直在寻找这个答案。

以上是关于iOS横屏定位问题Swift SpriteKit的主要内容,如果未能解决你的问题,请参考以下文章

这个带有 SpriteKit 代码的 Swift 没有达到预期的效果

SpriteKit Swift动画一次只能在一个精灵上 - iOS

在Sprite纹理中检测触摸而不是整个框架iOS Swift SpriteKit?

Swift SpriteKit 获得可见的帧大小

在屏幕上的 3 个特定位置生成敌人 Swift SpriteKit IOS

如何重命名 iOS SpriteKit 模板中的默认场景?