SpriteKit跨设备在视图框架内生成对象

时间:2018-09-02 01:30:50

标签: swift sprite-kit coordinates

我正在spriteKit中创建我的第一个游戏。我遵循了一些教程,因此我可以使游戏以单一大小运行。 游戏的对象从屏幕顶部产生,并朝着位于底部的玩家下落。

我遇到的问题是播放器和对象的坐标都相对于场景,默认情况下是iPad pro 9.7大小。 现在,当我在iPhone 8上运行游戏时,对象也会在视图外部生成,并且播放器还可以向左/向右移动一点(我将AspectFill用作缩放模式,因此侧面会被切除)。

将播放器和对象都定位为当前视图的子级的正确方法是什么,以使它们正确缩放并使其坐标相对于它?

我只是用这个来给玩家一个起始位置(当然这是一个占位符):

player = Player(color: .red, size: CGSize(width: 40, height: 80))
player.position = CGPoint(x: frame.midX, y: frame.size.height/5)
player.zPosition = ZPosition.player
addChild(player)

编辑:要澄清一下,问题是在iPhone8上,midX是384,但是视图的midX是160,因此坐标不匹配

这里是一张图片,用于阐明https://imgur.com/a/0I8i5CX 玩家应该只在中间产生,这不成问题,问题在于,在任何给定时间,触摸坐标系都不同于玩家的系统,因此无法单击。

此外,我在gamecene.sks中的中心是0,0

3 个答案:

答案 0 :(得分:1)

在Sprite Kit中进行开发时,需要考虑纵横比。如果您真正使用的是“单个大小”,那么无论您使用的是哪种设备,您的中心都应该相同。 (0,0)

根据您的口吻

  

问题在于,midX为384,但在iPhone8上视图的midX为160

是您从视图中读取内容,而不是场景中的内容。

这很糟糕,因为您的视图和场景将具有两种不同的大小。

您需要做的第一件事就是定义您的游戏区域。如果您想让桨碰到所有设备的侧面,则需要以18:39的宽高比进行开发(如果计划使用iphone x上的安全区域,则应以9:16进行开发)

这意味着在Ipad上,对象将从屏幕顶部被切除,因为剪辑将发生在屏幕顶部而不是侧面。

现在,如果您想让拨片击中屏幕的两边,并让对象在屏幕顶部产生,那么您将需要使用.resizeScale模式并标准化所有单位(通常在0和1)。

这意味着您将最终在具有不同长宽比的设备上创建不同的游戏体验,而不是仅通过剪辑获得不同的观看体验。

答案 1 :(得分:0)

请共享一张图片,以便我现在可以正确理解问题了,好像您正面临约束方面的问题,并且您希望玩家的位置始终位于每个屏幕的中间,这很简单,您必须将x值设为0

player.position = CGPoint(x: 0, y: frame.size.height/5)

答案 2 :(得分:0)

我通过添加边距并将其用作变量来解决

view.setBackgroundColor(Color.rgb(0, 198, 255));