通用游戏中的SkSpriteNode位置

Ada*_*don 6 ios sprite-kit swift

我正在使用Swift以纵向模式为所有iOS设备创建通用游戏.在GameViewController中,我正在创建这样的场景:

let scene = GameScene(size:CGSize(width: 1536, height: 2048))
scene.scaleMode = .AspectFill
Run Code Online (Sandbox Code Playgroud)

背景图像的分辨率为1536x2048,因此在iPad上以scaleMode显示其全尺寸,在iPhone 6上显示1152x2048,侧面修剪.在所有设备上都可以正常工作,只需要一个背景图像.问题是,如果我调用size.width或self.frame.size.width,它总是返回1536,即使实际可见区域是例如1152.

如何设置SkSpriteNode相对于可见区域的位置,以便它例如从每个设备的角落50x50?

Epi*_*yte 10

如何设置SkSpriteNode相对于可见区域的位置,以便它例如从每个设备的角落50x50?

"可见区域"就是视图.

因此,您可以相对于视图而不是场景制作您的位置.我实际上在我的游戏中做了很多,这是通用的,可以在OS X和iOS上运行.

在我的情况下,我通常为用户界面执行此操作,因此我可能有一个缩放的场景但我想设置一些位置不是相对于缩放的场景而是相对于可见区域(即视图).

为此,您可以编写一个将视图坐标转换为相应场景坐标的函数.

这是我使用的功能.请注意,我从视图高度中减去了我想要的y位置,这样我可以将(0,0)视为左下角像sprite-kit一样,而不是像UIKit那样左上角.

func convert(point: CGPoint)->CGPoint {
    return self.view!.convert(CGPoint(x: point.x, y:self.view!.frame.height-point.y), to: self)
}
Run Code Online (Sandbox Code Playgroud)

以下是使用此功能的示例:

self.node.position = convert(CGPoint(x: 50, y: 50)) 
Run Code Online (Sandbox Code Playgroud)

无论场景的缩放和大小如何,这将始终强制节点的位置相对于视图(屏幕的可见部分)为(50,50).